我偶然发现了一些奇怪的事...... 也许有人可以尝试解释这两者之间的区别:
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("!");})
请注意,map itereare仅适用于a2而不适用于a1。
这发生在NodeJS,Chrome和FF上。
答案 0 :(得分:4)
在JavaScript中,这会创建一个稀疏数组:
var a = new Array(3) // a = [ , , ,]
如果您尝试使用map
或forEach
进行迭代,JavaScript会跳过漏洞。调用
var b = Array.apply(null, Array(3)) // b = [undefined, undefined, undefined]
(这相当于使用Array(undefined, undefined, undefined)
调用数组构造函数)
创建一个密集的数组b
。 b
与a
几乎相同,但现在,您可以迭代元素,换句话说,因为数组现在很密集,map和foreach不会跳过元素。