在 Chrome 21 中,[,]
输入到控制台输出
[未定义 x 1]
和喂养[undefined]
输出
[不明确的]
[undefined]
和 和有什么不一样[undefined x 1]
?
符号是什么[undefined x 1]
?
在 Chrome 21 中,[,]
输入到控制台输出
[未定义 x 1]
和喂养[undefined]
输出
[不明确的]
[undefined]
和 和有什么不一样[undefined x 1]
?
符号是什么[undefined x 1]
?
[,]
创建一个长度为 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
});
在 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]
看起来这只是显示重复的“未定义”值的一种简写方式。例如:
> [,,,]
[ undefined x 3 ]
但是[]
根本不一样[undefined]
。如果我是你,我会仔细检查。