我一直在一些奇怪的事情迷迷糊糊.... 也許有人可以嘗試解釋這兩者之間的區別: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