JS數(shù)組的數(shù)字和非數(shù)字下標(biāo)

正在安靜的擼碼,PHP老公突然Q我,問,“你們JS里數(shù)組能用非數(shù)字下標(biāo)嗎?!?/p>

并沒有仔細(xì)思考的我,扔給他一句,“不行,鬧呢,2的32次方都不夠使了么?!?/p>

然而,事情并沒有如我所料的結(jié)束,片刻之后,他滴滴我,說“你個大混子,這是可以的?!比缓笕咏o我一個截圖。

JS的Array是可以有非數(shù)字下標(biāo)的,就是有些行為怪異。你說這人非要用PHP什么的東西往JS里套,還來麻煩我,我能怎么辦,我也很絕望啊??刂婆_里看一下吧。

let a=[];
a['aa']='bb'
console.log(a);
//[aa: "bb"]
//aa: "bb"
//length: 0

霸氣的把length=0化了線zhuai給他。JSer們并不怎么用這個奇怪的寫法是有原因的啊。length=0了你要我們怎么辦!.pop()和.shift()等作用于數(shù)組元素的方法你要我們怎么用?恩?

再者,如果不是 === 的情況下,JS很難分清'1'和1有什么區(qū)別。所以如果你的下標(biāo)突然變成了一個字符串?dāng)?shù)字就有意思了。

let a=[];
a['aa']='bb';
a['100']='vvvvv';
console.log(a.length);
//101

就是這么神奇。js表示’100’和100長得一樣啊并沒有區(qū)別啊那個引號是什么我讀書少你別騙我。所以這個時候js會自動把a(bǔ)[‘100’]當(dāng)成a[100]來使用,把當(dāng)前數(shù)組的長度變成100,再把'vvvvv'這個value push到最后,哪怕真實(shí)長度只有2……

所以,這是為啥?

當(dāng)給一個js數(shù)組添加字符串下標(biāo)的時候,就相當(dāng)于為該數(shù)組對象添加了一個自定義屬性,這就是所謂的“字符串下標(biāo)”。而為數(shù)組添加屬性并不會增加數(shù)組長度,所以長度不會發(fā)生改變了。你到是能用key找到這個value,但是你并沒有辦法遍歷它。

a.forEach(v=>console.log(v))
//'vvvvv'

看你只能得到后來增加的那個index為101的'vvvvv'。

所以呢,來自stackoverflow的Michael Berkowski:“如果要使用的是一個完全由'字符串下標(biāo)'組成的數(shù)組,那還是將其聲明為一個Object類型的對象要更好一些。”

對啊,有對象干嘛還要找數(shù)組!數(shù)組長得比對象美嗎!口亨!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容