剛開始接觸JavaScript時,很常會遇到 == 或 === 來判斷兩邊的值是否相等,但是「兩個」等號和「三個」等號,常常讓我們感到困惑,以下來詳細說明它們差異是什麼!
先上一段程式碼
let a = 1
let b = 2
console.log(a == b) // 輸出 false
console.log(a == 1) // 輸出 true
console.log(b == 2) // 輸出 true
a 不等於 b 很正確,這個部分我們一定沒有問題~
再附上另一段程式碼
let a = 1
let b = '1'
console.log(a == b) // 輸出 true
為什麼數字1會等於字串1(?)
原因就是「兩個等號」JavaScript會做「自動轉型」,因此新增了「三個等號」來執行嚴格檢查
let a = 1
let b = '1'
console.log(a === b) // 輸出 false
使用「三個等號」來進行嚴格檢查,因為數字1不等於字串1,所以判定會是false
有了前面的範例,接下來說明這兩種比較運算子的定義吧!
當等號兩邊的資料類型不同時,會進行「自動轉型
」。
JavaScript是如何進行自動轉型的呢?
console.log(true == 1) // 輸出 true
console.log(flase == 0) // 輸出 false
console.log(3 == '3') // 輸出 true
「三個等於」和「兩個等於」都是比較的意思,兩者都會做「型別檢查」,但是三個等於不會做「自動轉型」。
===嚴格比較只有在「數值
」與「型別
」都相同的情況下才會回傳true。
console.log(true === 1) // 輸出 false
console.log(false === 0) // 輸出 false
console.log(3 === '3') // 輸出 false
再來説説令人頭痛的null,undefined 🥺
* null == undefined 會判定為 true , 但使用 === 嚴格比較,會判定是false
為什們使用 == 判斷會是true?
undefined代表的是尚未被賦予值,null代表是空值或是沒有,因此在 == 比較時,Javascript會嘗試將兩者進行型別自動轉換,使兩種值相等。
為什麼使用 === 會是false?
使用===嚴格比較時,「數值」和「型別」都要相同才會回傳true
null的型別是object,undefined的型別是undefined,兩者型別不一樣,所以是flase
最後,無論選擇哪種比較運算符,最重要的是明確知道它的行為和結果。最最最後還是會建議使用 === 是一個更好的選擇~