摘要:正確的解釋是允許在相等比較中進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,而不允許。特殊情況不等于等于對(duì)象的寬松相等,兩個(gè)對(duì)象指向同一個(gè)值時(shí),即視為相等,不發(fā)生強(qiáng)制類(lèi)型轉(zhuǎn)換。也就是說(shuō),在中和是一回事,可以相互進(jìn)行隱式強(qiáng)制類(lèi)型轉(zhuǎn)換。
在JS書(shū)籍和博客中常見(jiàn)的一個(gè)誤區(qū)是:“==檢查值是否相等,===檢查值和類(lèi)型是否相等”。
正確的解釋是:“==允許在相等比較中進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,而===不允許”。==和===都會(huì)檢查操作數(shù)的類(lèi)型。區(qū)別在于操作數(shù)類(lèi)型不同時(shí)它們的處理方式不同。
如果進(jìn)行比較的兩個(gè)值類(lèi)型相同,則==和===使用相同的算法,所以除了JavaScript引擎實(shí)現(xiàn)上的細(xì)微差別之外,它們之間并沒(méi)有什么不同。
如果兩個(gè)值的類(lèi)型不同,我們就需要考慮有沒(méi)有強(qiáng)制類(lèi)型轉(zhuǎn)化的必要,有就用==,沒(méi)有就用===,不用在乎性能。
如果2個(gè)值的類(lèi)型相同,就僅比較它們是否相等。
特殊情況:
NaN不等于NaN +0等于-0
對(duì)象的寬松相等==,兩個(gè)對(duì)象指向同一個(gè)值時(shí),即視為相等,不發(fā)生強(qiáng)制類(lèi)型轉(zhuǎn)換。
==在比較兩個(gè)不同類(lèi)型的值時(shí)會(huì)發(fā)生隱式強(qiáng)制類(lèi)型轉(zhuǎn)換,會(huì)將其中之一或兩者都轉(zhuǎn)換為相同的類(lèi)型后在進(jìn)行比較。
a) 字符串和數(shù)字之間的相等比較
如果x是數(shù)字,y是字符串,則返回x == ToNumber(y)
如果x是字符串,y是數(shù)字,則返回ToNumber(x) == y
b) 其他類(lèi)型和布爾類(lèi)型之間的相等比較
如果x是布爾類(lèi)型,則返回ToNumber(x) == y
如果y是布爾類(lèi)型,則返回x == ToNumber(y)
建議無(wú)論什么情況下都不要使用 ==true 和 ==false
c) undefined和null之間的相等比較
如果x是null,y是undefined,則結(jié)果為true
如果x是undefined,y是null,則結(jié)果為true
在==中undefined和null相等(它們也與其自身相等),除此之外其他值都不存在這種情況。也就是說(shuō),在==中null和undefined是一回事,可以相互進(jìn)行隱式強(qiáng)制類(lèi)型轉(zhuǎn)換。
d) 對(duì)象(對(duì)象/函數(shù)/數(shù)組)和非對(duì)象(數(shù)字/字符串/布爾值)之間的相等比較
如果x是基本類(lèi)型,y是對(duì)象,則先把y.toString(),然后在比較
e)比較少見(jiàn)的情況
[]==![] //true ![]=>false =>false == []=> true
以下兩個(gè)原則可以讓我們有效地避免出錯(cuò):
如果兩邊的值中有true或者false,千萬(wàn)不要使用== 如果兩邊的值中有[]、’’或者0,盡量不要使用== 最好使用===來(lái)避免不經(jīng)意的強(qiáng)制類(lèi)型轉(zhuǎn)換。這兩個(gè)原則可以讓我們避免幾乎所有強(qiáng)制類(lèi)型轉(zhuǎn)換的坑。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100843.html
摘要:如果沒(méi)有傳入的話(huà)如果是類(lèi)型,則取否則,取這個(gè)方法大致和一樣,除了以下返回返回參考知乎中和區(qū)別是什么全面解析中的數(shù)據(jù)類(lèi)型與類(lèi)型轉(zhuǎn)換規(guī)范 有哪些判斷相等性的方法 JavaScript現(xiàn)在提供了三種方法來(lái)判斷相等性: ===,三個(gè)等號(hào)即嚴(yán)格相等 ==,兩個(gè)等號(hào)即寬松相等 Object.is(),ES6中用來(lái)判斷相等的方法 判斷相等性的細(xì)節(jié) ===(嚴(yán)格相等) 被比較的兩個(gè)數(shù)不會(huì)進(jìn)行類(lèi)型轉(zhuǎn)...
摘要:通過(guò)使用其構(gòu)造函數(shù),可以將一個(gè)值的類(lèi)型轉(zhuǎn)換為另一種類(lèi)型。如果使用兩次,可用于將該值轉(zhuǎn)換為相應(yīng)的布爾值。 編譯自:[1] + [2] – [3] === 9!? Looking into assembly code of coercion.全文從兩個(gè)題目來(lái)介紹類(lèi)型轉(zhuǎn)換、寬松相等以及原始值的概念: [1] + [2] – [3] === 9 如果讓 a == true && a == fa...
摘要:隱式強(qiáng)制類(lèi)型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類(lèi)型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺(jué)得不夠明顯的強(qiáng)制類(lèi)型轉(zhuǎn)換都可以算作隱式強(qiáng)制類(lèi)型轉(zhuǎn)換,接下來(lái),此文將會(huì)介紹幾種常見(jiàn)的隱式類(lèi)型轉(zhuǎn)換。 隱式強(qiáng)制類(lèi)型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類(lèi)型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺(jué)得不夠明顯的強(qiáng)制類(lèi)型轉(zhuǎn)換都可以算作隱式強(qiáng)制類(lèi)型轉(zhuǎn)換,接下來(lái),此文將會(huì)介紹幾種常見(jiàn)的隱式類(lèi)型轉(zhuǎn)換。 加法操作符 轉(zhuǎn)換規(guī)則: ...
摘要:同一類(lèi)的復(fù)合類(lèi)型值兩個(gè)復(fù)合類(lèi)型對(duì)象數(shù)組函數(shù)的數(shù)據(jù)比較時(shí),不是比較它們的值是否相等,而是比較它們是否指向同一個(gè)對(duì)象。寬松相等雙等號(hào)將執(zhí)行類(lèi)型轉(zhuǎn)換原始類(lèi)型的值原始類(lèi)型的數(shù)據(jù)會(huì)轉(zhuǎn)換成數(shù)值類(lèi)型再進(jìn)行比較。 事件這塊知識(shí)點(diǎn)雖然是老生長(zhǎng)談的,但對(duì)于我來(lái)說(shuō)多多整理,多多感悟,溫故知新,每次看看這塊都有不同的收獲.(在這里我不會(huì)長(zhǎng)篇大論,只會(huì)挑重點(diǎn);具體的小伙伴們自行查找)參考:https://dev...
摘要:同一類(lèi)的復(fù)合類(lèi)型值兩個(gè)復(fù)合類(lèi)型對(duì)象數(shù)組函數(shù)的數(shù)據(jù)比較時(shí),不是比較它們的值是否相等,而是比較它們是否指向同一個(gè)對(duì)象。寬松相等雙等號(hào)將執(zhí)行類(lèi)型轉(zhuǎn)換原始類(lèi)型的值原始類(lèi)型的數(shù)據(jù)會(huì)轉(zhuǎn)換成數(shù)值類(lèi)型再進(jìn)行比較。 事件這塊知識(shí)點(diǎn)雖然是老生長(zhǎng)談的,但對(duì)于我來(lái)說(shuō)多多整理,多多感悟,溫故知新,每次看看這塊都有不同的收獲.(在這里我不會(huì)長(zhǎng)篇大論,只會(huì)挑重點(diǎn);具體的小伙伴們自行查找)參考:https://dev...
閱讀 3355·2021-11-22 14:44
閱讀 2567·2019-08-30 14:10
閱讀 2639·2019-08-30 13:12
閱讀 1241·2019-08-29 18:36
閱讀 1371·2019-08-29 16:16
閱讀 3357·2019-08-26 10:33
閱讀 1793·2019-08-23 18:16
閱讀 401·2019-08-23 18:12