在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ js關(guān)于稀疏數(shù)組的問題

js關(guān)于稀疏數(shù)組的問題

看《javascript權(quán)威教程》的時(shí)候,關(guān)于第七章7.3稀疏數(shù)組,有兩點(diǎn)不是很明白。

第一

書中的原話是:

注意,當(dāng)在數(shù)組直接量中省略值時(shí)不會創(chuàng)建稀疏數(shù)組。省略的元素在數(shù)組中是存在的,其值為undefined。這和數(shù)組元素根本不存在是有一些微妙的區(qū)別的??梢杂胕n操作符來檢查區(qū)別。

接著就是例子:

var a1 = [,,,];//數(shù)組是[undefined,undefined,undefined]
var a2 = new Array(3);
0 in a1  //true:a1在索引0處有一個(gè)元素。
0 in a2  //false

可是我在編譯器里測試的時(shí)候,0 in a1輸出的是false。

第二

上面例子結(jié)束后,書中繼續(xù)說的問題徹底有點(diǎn)暈了。

需要注意的是,當(dāng)省略數(shù)組直接量中的值時(shí)(使用連續(xù)的逗號,比如[1,,3]),這時(shí)所得到的數(shù)組也是稀疏數(shù)組,省略掉的值時(shí)不存在的。

繼續(xù)例子:

var a1 = [,];            //此數(shù)組沒有元素,長度為1
var a2 = [undefined];    //此數(shù)組包含一個(gè)值為undefined的元素。
0 in a1             //false:a1在索引為0處沒有元素。

感覺上下有點(diǎn)沖突的意思,并且第一個(gè)例子中我自己驗(yàn)證還和書中的不一樣,到底哪里出了問題?求大神解答。
附上圖片:

clipboard.png

回答
編輯回答
拽很帥

犀牛書里的確有很多錯(cuò)誤,也有可能是因?yàn)镋S標(biāo)準(zhǔn)以及執(zhí)行環(huán)境等不一樣導(dǎo)致的。
實(shí)踐得真知,建議手動(dòng)執(zhí)行

var a1 = [,,]
var a2 = new Array(3)
var a3 = [1,,3]

console.log(0 in a1)
console.log(0 in a2)
console.log(0 in a3)

console.log(1 in a3)

得到結(jié)果:

false
false
true
false

所以只要是省略了該位置的元素,用 in 檢測都是 false,同時(shí)用 for in 也遍歷不到。

console.log("a1:")
for (var a in a1){
    console.log(a)
}

console.log("a2:")
for (var a in a2){
    console.log(a)
}

console.log("a3:")
for (var a in a3){
    console.log(a)
}

得到結(jié)果:

a1:
a2:
a3:
0
2
2017年9月24日 05:03