日期:2014-05-16  浏览次数:20374 次

关于稀疏数组的疑惑
最近在看javascript权威指南(第六版),在7.3节中,有下面这段代码

var arr2 = [,,,];
var arr3 = new Array(3);
console.log(0 in arr2);  //false  ====>书中写的true:0在arr1处有一个元素
console.log(0 in arr3);  //false


我在火狐、ie9、chrome中测试了都是false,后来又打印了里面的元素


console.log(arr2); // [undefined,undefined,undefined]
console.log(arr3); // [undefined,undefined,undefined]


上面显示的数组里都是undefined,而当我循环时,却啥都木有

for(var i in arr2) {
    console.log(i+'='+arr2[i]) //没有显示
}
for(var i in arr3) {
    console.log(i+'='+arr3[i]) //没有显示
}

当我改动一处时,

var arr2 = [undefined,,,];
var arr3 = new Array(3);
console.log(0 in arr2);  //true
console.log(0 in arr3);  //false


我想问下,这里的undefined之间的区别


------解决方案--------------------
呵呵,骂得好。NND

此undefined非彼undefined

照我看嘛:
第一个返回false,是因为数组中没有元素
第二个返回true,是因为数组中指定数组下标有值,所以返回true。相当于判断arr2[0]有没有值了

var arr2 = [undefined,,,];
console.log(1 in arr2);  //照样是false