看《javascript权威教程》的时候,关于第七章7.3稀疏数组,有两点不是很明白。
第一
书中的原话是:
‘
注意,当在数组直接量中省略值时不会创建稀疏数组。省略的元素在数组中是存在的,其值为undefined。这和数组元素根本不存在是有一些微妙的区别的。可以用in操作符来检查区别。
’
接着就是例子:
var a1 = [,,,];//数组是[undefined,undefined,undefined]
var a2 = new Array(3);
0 in a1 //true:a1在索引0处有一个元素。
0 in a2 //false
可是我在编译器里测试的时候,0 in a1输出的是false。
第二
上面例子结束后,书中继续说的问题彻底有点晕了。
‘
需要注意的是,当省略数组直接量中的值时(使用连续的逗号,比如[1,,3]),这时所得到的数组也是稀疏数组,省略掉的值时不存在的。
’
继续例子:
var a1 = [,]; //此数组没有元素,长度为1
var a2 = [undefined]; //此数组包含一个值为undefined的元素。
0 in a1 //false:a1在索引为0处没有元素。
感觉上下有点冲突的意思,并且第一个例子中我自己验证还和书中的不一样,到底哪里出了问题?求大神解答。
附上图片:
犀牛书里的确有很多错误,也有可能是因为ES标准以及执行环境等不一样导致的。
实践得真知,建议手动执行
得到结果:
所以只要是省略了该位置的元素,用 in 检测都是 false,同时用 for in 也遍历不到。
得到结果: