8

可能重复:
JavaScript 中的“未定义 x 1”是什么?

在 Chrome 21 中,[,]输入到控制台输出

[未定义 x 1]

和喂养[undefined]输出

[不明确的]

[undefined]和 和有什么不一样[undefined x 1]

符号是什么[undefined x 1]

4

4 回答 4

11

[,]是一个稀疏数组。它的长度为1,但没有值 ( 0 in [,] === false)。也可以写成new Array(1)

[undefined]是一个长度数组,1其值为undefinedindex 0

访问属性“ 0”时,两者都将返回undefined- 第一个是因为该属性未定义,第二个是因为该值是“未定义”。但是,数组不同,它们在控制台中的输出也不同。

于 2012-08-04T13:23:30.253 回答
5

[,]创建一个长度为 1 且没有索引的数组。

[undefined]创建一个长度为 1 的数组,其undefined值为 index 0

Chromeundefined × x用于没有顺序索引的稀疏数组:

var a = [];

a[8] = void 0; //set the 8th index to undefined, this will make the array's length to be 9 as specified. The array is sparse
console.log(a) //Logs undefined × 8, undefined, which means there are 8 missing indices and then a value `undefined`

如果要.forEach在稀疏数组上使用,它会跳过不存在的索引。

a.forEach(function() {
    console.log(true); //Only logs one true even though the array's length is 9
});

就好像你做一个正常.length的循环一样:

for (var i = 0; i < a.length; ++i) {
    console.log(true); //will of course log 9 times because it's only .length based
}

如果您希望.forEach行为与非标准实现相同,则存在一个问题。

new Array(50).forEach( function() {
    //Not called, the array doesn't have any indices
});

$.each( new Array(50), function() {
    //Typical custom implementation calls this 50 times
});
于 2012-08-04T13:26:19.863 回答
0

在 Chrome 21 上,这对我来说又是奇怪的[]输出。[]

无论如何[a, b, c, ...]是 Javascript 的数组表示法,所以你基本上是在定义一个没有值的数组。

然而,结束,是可以接受的,以使数组生成更容易。所以 Chrome 告诉你的是数组中有一个未定义的值。有关示例,请参见代码。

[,,]
> [undefined x2]
[1,2,]
> [1, 2]
[1,2,,]
> [1, 2, undefined × 1]
[1,2,,,]
> [1, 2, undefined × 2]
[1,2,,3,4,,,6]
> [1, 2, undefined × 1, 3, 4, undefined × 2, 6]
于 2012-08-04T13:24:42.760 回答
-1

看起来这只是显示重复的“未定义”值的一种简写方式。例如:

> [,,,]
  [ undefined x 3 ]

但是[]根本不一样[undefined]。如果我是你,我会仔细检查。

于 2012-08-04T13:16:39.853 回答