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

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

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,后来又打印了里面的元素

JScript code

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



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

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


当我改动一处时,
JScript code

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