在尝试使用一些不同的方法生成JavaScript数组时,我偶然发现了一个奇怪的结果。使用map
到push
一系列自引用(DEMO):
a=[1,1,1,1,1,1,1,1,1,1];
a=a.map(a.push,a);
我得到以下结果(在Chrome中):
[13,16,19,22,25,28,31,34,37,40]
任何人都可以解释原因吗?
答案 0 :(得分:5)
对于a
中的每个元素,使用该元素,该元素的索引和遍历的数组调用push
。然后,对于数组中的每个元素,我们添加这三个附加元素。这说明原始数组中每个元素的长度增加了3。 push的结果是添加元素后数组的长度,因此生成的数组(来自map
)是一个数组,在每次推送回调完成后保存a
数组的长度。 / p>
答案 1 :(得分:1)
它与push
的返回值是新长度有关。不知道为什么它增加3。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push
<强>返回强>
调用方法的对象的新长度属性。