盡量不要用==
==的比較程序
以 [] == ![] 為例

左邊 [] 是個陣列 右邊 ![] 是個運算式,表示對陣列取反,需要對陣列進行布爾判定,陣列是物件所以是true,取反之后為false,所以就相當于比較

== 兩邊資料型別不一樣會將資料轉變成原始型別 ,原始型別有 null 、 undefined 、數字、字串、布林值,如果資料轉化成字串就會優先呼叫toString(),如果資料轉化成數字就會優先呼叫valueOf()

所以實際上運算式又變成了

都是原始型別了,但是兩邊的型別不一樣 == 又得把兩邊轉成數字 ' ' 轉成數字是 0 ,false轉成數字也是 0 就變成了 0和0的比較

所以說 == 會讓看上去明顯不相等的兩個運算式 結果為 true ,這顯然是不合理的,而===是嚴格相等就不會出現這種情況,
二者的區別
== 是相等 ===是嚴格相等
== 在比較時,如果兩邊的型別相等則進行 === 比較,不相等則會先轉換成相同型別再進行 === 比較,而===比較時,只要型別不一樣就會回傳 false
=== 比較:
1)只要型別不同就一定不相等
2)如果兩個值都是數字并且為同一個值,那么相等,如果至少一個是NaN,則不相等(判定一個值是否為NaN,只能通過isNaN()來判斷)
3)如果兩個值都是字串且每個位置的字符都一樣,那么相等,否則不相等
4)如果兩個值都是true 或者 false 那么相等
5)如果兩個值都是參考型別并且參考同一個物件,那么相等
6)如果兩個值都是null或者undefined,那么相等
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/541689.html
標籤:JavaScript
