JavaScript数组奇怪的初始化

时间:2014-09-27 06:18:08

标签: javascript arrays node.js google-chrome firefox

我偶然发现了一些奇怪的事...... 也许有人可以尝试解释这两者之间的区别:

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上。

1 个答案:

答案 0 :(得分:4)

在JavaScript中,这会创建一个稀疏数组:

var a = new Array(3) // a = [ , , ,]

如果您尝试使用mapforEach进行迭代,JavaScript会跳过漏洞。调用

var b = Array.apply(null, Array(3)) // b = [undefined, undefined, undefined]

(这相当于使用Array(undefined, undefined, undefined)调用数组构造函数)

创建一个密集的数组bba几乎相同,但现在,您可以迭代元素,换句话说,因为数组现在很密集,map和foreach不会跳过元素。