我一直在一些奇怪的事情迷迷糊糊.... 也许有人可以尝试解释这两者之间的区别:JavaScript的数组怪异动初始化
var a1=Array(2);
var a2=Array.apply(null,a1);
console.log(a1);
console.log(a2);
console.log(a1[0]===a2[0]);
注意的事项是相等的,但看起来阵列的控制台日志不同(在Chrome和NodeJS上)。
也是其中的其他方面似乎不同的工作:
a1.map(function(i){console.log("!");})
a2.map(function(i){console.log("!");})
通知映射itereares只为A2不是为A1。
这发生在NodeJS,Chrome和FF上。
任何想法?
而不检查文档,我会说,'A1 =阵列(2)''套a1'与长度为2的数组,但不显式地分配任何元素。而'a2 = Array.apply(null,a1)'就像说'a2 = Array(undefined,undefined)',即它将两个元素的值明确地设置为'undefined'。 '.map()'只迭代已经明确设置的元素。 – nnnnnn 2014-09-27 06:23:48
换句话说,(我猜在这种情况下)关键是'someArray [someIndex]'将返回'undefined'出于两个可能的原因:1.因为'someIndex'处的元素从未被赋值,或者2.因为'someIndex'处的元素被显式赋值为'undefined'。而你的'a1 [0] === a2 [0]'测试是比较原因1'未定义'与原因2'未定义'。 – nnnnnn 2014-09-27 06:26:39