87,904
社区成员
发帖
与我相关
我的任务
分享
var arr2 = [,,,];
var arr3 = new Array(3);
console.log(0 in arr2); //false ====>书中写的true:0在arr1处有一个元素
console.log(0 in arr3); //false
console.log(arr2); // [undefined,undefined,undefined]
console.log(arr3); // [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
var a1 = [,,,]; // This array is [undefined, undefined, undefined]
var a2 = new Array(3); // This array has no values at all
0 in a1 // => true: a1 has an element with index 0
0 in a2 // => false: a2 has no element with index 0
这个地方作者描述返回true。我在浏览器中测试的结果和你相同。
但是在中文版本中(淘宝团队翻译)加入了下面的话:
“需要注意的是,当省略数组直接量中的值时(使用连续的逗号,比如[1,,3]),这时所得到的数组也是稀疏数组,省略掉的值是不存在的:”
然后给出例子:
var a1 = [,]; // 此数组没有元素,长度是1
var a2 = [undefined]; //……
0 in a1 // => false: a1 在索引0处没有元素
0 in a2 // => true: a2 在索引0处有一个值为undefined的元素
然后还添加了下面这段话:
“在一些旧版本的实现中(比如Firefox 3),在存在连续逗号的情况下,插入undefined值的操作则与此不同,在这些实现中,[1,,3]和[1,undefined,3]是一模一样的。”
其实,淘宝团队在翻译时貌似发现原作者给的示例执行可能会是false,所以添加了这段代码以铺垫说明“在旧版版中实现……[1,,3]和[1,undefined,3]是一模一样的”这个特例。
由此,原作者的测试环境是所谓的“旧版本”
我认为两处undefined没有什么区别,都是javascript中的特殊值undefined