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