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