JS不要使用 == 比較數(shù)組

不要使用 == 比較數(shù)組

JavaScript 中的數(shù)組與其它編程語(yǔ)言的不同,不應(yīng)該使用 == 運(yùn)算符比較 JavaScript 中的數(shù)組。

該運(yùn)算符不會(huì)對(duì)數(shù)組進(jìn)行特殊處理,它會(huì)像處理任意對(duì)象那樣處理數(shù)組。

讓我們回顧一下規(guī)則:

僅當(dāng)兩個(gè)對(duì)象引用的是同一個(gè)對(duì)象時(shí),它們才相等 ==。

如果 == 左右兩個(gè)參數(shù)之中有一個(gè)參數(shù)時(shí)對(duì)象,另一個(gè)參數(shù)是原始類型,那么該對(duì)象將會(huì)被轉(zhuǎn)換為原始類型,轉(zhuǎn)換規(guī)則如?對(duì)象——原始值轉(zhuǎn)換?一章所述。

null undefined 相等 == ,且各自不等于任何其他的值。


嚴(yán)格比較 === 更簡(jiǎn)單,因?yàn)樗粫?huì)進(jìn)行類型轉(zhuǎn)換。

所以,如果我們使用 == 來(lái)比較數(shù)組,除非我們比較的是兩個(gè)引用同一數(shù)組的變量,否則它們永遠(yuǎn)不相等。

例如:

alert( [] == []);? ? //false

alert([0] == [0]);? ? //false

從技術(shù)上講,這些數(shù)組是不同的對(duì)象。所以它們不相等。 == 運(yùn)算符不會(huì)進(jìn)行逐項(xiàng)比較。

與原始類型的比較也可能會(huì)產(chǎn)生看似很奇怪的結(jié)果:

alert(0 == []);? ? //true

alert('0' == []);? ? //false

在這里兩個(gè)例子中,我們將原始類型和數(shù)組對(duì)象進(jìn)行比較。因此,數(shù)組 [] 被轉(zhuǎn)換為原始類型以進(jìn)行比較,被轉(zhuǎn)換成了一個(gè)空字符串 ‘’。

然后,接下來(lái)的比較就是原始類型之間的比較,如?類型轉(zhuǎn)換?一章所述:

//在 [] 被轉(zhuǎn)換為 ‘’ 后

alert(0 == '');? ? //true,因?yàn)?‘’ 被轉(zhuǎn)換成了數(shù)字 0

alert('0' == '');? ? //flase,沒(méi)有進(jìn)一步的類型轉(zhuǎn)換,是不同的字符串


那么,我們應(yīng)該如何對(duì)數(shù)組進(jìn)行比較呢?

很簡(jiǎn)單,不要使用 == 運(yùn)算符。而是,可以在循環(huán)中或者下一章中我們將介紹迭代方法逐項(xiàng)地比較它們。

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

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

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