JavaScript中关联数组的奇怪行为

4
如果我在Chrome控制台上执行以下代码,则会得到关联数组的答案:
var arr= [];
var i = 1;
for(var j = 1; j < 3; j++)
    arr[j]=j;console.log(arr);

答案是:[1: 1, 2: 2] 但是当我使用node执行时:[ , 1, 2 ] 为什么有这么大的差异?据我所知,两者都使用v8引擎。

为什么要使用关联数组?它只是一个普通的数组。 - Nina Scholz
1个回答

5
火狐浏览器显示:
Array [ <1 empty slot>, 1, 2 ]

IE Edge表示

[object Array][undefined, 1, 2]

然而,它们都是正确的。

Chrome根本没有报告空的索引0。

Node显示索引0为空。

Firefox会明确告诉你正在发生什么。

试试这个:

var arr= [];var i = 1; for(var j = 1; j < 3; j++) arr[j*3]=j+3;console.log(arr);

火狐浏览器:

Array [ <3 empty slots>, 4, <2 empty slots>, 5 ]

节点

[ , , , 4, , , 5 ]

IE Edge

[object Array][undefined, undefined, undefined, 4, undefined, undefined, 5]

Chrome

[3: 4, 6: 5]

这种奇怪行为的原因是什么? - hectk
@tehect 奇怪?对我来说很清晰。比阅读IE Edge更容易 - CodingIntrigue
这并不奇怪。控制台不是 ECMAScript 标准的一部分,如何将稀疏数组记录到控制台取决于实现...不用担心,所有这些数组都会表现相同。 - Jaromanda X
尝试运行以下代码 var arr=[]; arr[1000000] = 1;console.log(arr); - 最佳输出是在Chrome浏览器中,Firefox也可以尝试,IE放弃了,而Node仍在继续:D - Jaromanda X
我正在使用Canary,对于这个数组arr = [,2,3],它显示为[undefined × 1, 2, 3]。 - Raghavendra
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接