到底有什么区别:
Array(3)
// and
Array.apply(null, Array(3) )
第一个返回 [undefined x 3]
而第二个返回 [undefined, undefined, undefined]
。第二个可以通过 Array.prototype.functions
链接,例如 .map
,但第一个不是。为什么?
最佳答案
有一个区别,一个非常重要的区别。
Array
构造函数 either 接受一个数字,给出数组的长度,并创建一个具有“空”索引的数组,或者更准确地说,长度已设置,但数组实际上并不包含任何内容
Array(3); // creates [], with a length of 3
当以数字作为唯一参数调用数组构造函数时,您创建了一个空数组,并且无法使用通常的 Array 方法对其进行迭代。
或者... Array 构造函数接受多个参数,而创建一个数组,其中每个参数都是数组中的一个值
Array(1,2,3); // creates an array [1,2,3] etc.
当你调用它时
Array.apply(null, Array(3) )
它变得更有趣了。
apply
接受 this
值作为第一个参数,由于它在这里没有用,它被设置为 null
有趣的部分是第二个参数,其中传入了一个空数组。
当 apply
接受一个数组时,它就像调用
Array(undefined, undefined, undefined);
这会创建一个包含三个非空索引的数组,但其值实际设置为 undefined
,这就是它可以迭代的原因。
长话短说
主要区别在于 Array(3)
创建了一个包含三个空索引的数组。事实上,它们并不真正存在,数组的长度只有3
。
使用 apply
将这样一个带有空索引的数组传递给 Array 构造函数与执行 Array(undefined, undefined, undefined);
相同,它会创建一个数组具有三个 undefined
索引,而 undefined
实际上是一个值,因此它不像第一个示例中那样为空。
map()
等数组方法只能迭代实际值,不能迭代空索引。
关于javascript - Array.apply(null, Array(x) ) 和 Array(x) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349093/