2016-10-01 35 views
2

当我使用Array.apply行为创建数组时,我感到困惑。使用数组。适用于生成一个数组

参见以下代码:

Array.apply(null, { length: 6 }) 
Array.apply(null,new Array(6)) 

两个输出[未定义,未定义未定义,未定义未定义,未定义],这是你所期望的,6个元素的阵列。在另一方面,如果你使用下面的代码片段:

Array.apply(null, [6]) 

在这其中输出[未定义×6]这没有任何意义。

有没有人有这种行为的解释?

+0

无法重现 - > https://jsfiddle.net/70swc53z/ – adeneo

+1

哦,等等,它会输出,如果你直接输入到控制台,就像'Array(6)'一样,返回一个长度为6的数组,其中包含未定义的索引,在这种情况下,它未定义,它确实没有定义,不是值'undefined' – adeneo

回答

3

有些东西有记:

Array(6);  // Creates an array containing six empty slots 
Array(null); // Creates an array containing one null 
Array(6,6,6); // Creates an array containing three 6 
[6];   // Creates an array containing one 6 
[null];  // Creates an array containing one null 
[6,6,6];  // Creates an array containing three 6 

基本上,当Array被调用其是数的单个参数,该值被认为是该阵列的代替第一项的长度阵列。

两个

Array.apply(null, { length: 6 }); 
Array.apply(null, new Array(6)) 

的行为像

Array(undefined, undefined, undefined, undefined, undefined, undefined); 

所以他们创建包含6 undefined秒的阵列。

但是

Array.apply(null, [6]); 

就像

Array(6); 

因此它创建具有6个空槽阵列。