Stop using loose equality in JavaScript
不要再使用 == 了,改使用 === 吧!
發現問題
在 JavaScript 中常見可以使用兩種方法來比較值:
兩者的差別在於,一般相等會進行型別轉換,而嚴格相等則不會,舉例來說 1 == '1'
會轉換字串為數字再進行比較,因此會回傳 true
,而 1 === '1'
則會嚴格的比較兩者的型別所以會回傳 false
。
那麼這一個小差別會造成什麼潛在的問題呢?
使用鬆散的比較會讓程式比對條件上模稜兩可,像是以下的程式中很明顯 0
與 ''
是不相等的,由於使用的是鬆散的比較,這樣的程式撰寫會讓程式碼變得不夠嚴謹,因此建議使用嚴格比對。
總結
凡事能用 ===
就不使用 ==
,一開始就撰寫更嚴謹的判斷會更好。由於 ==
並不檢查型別,因此常常會被 Javasciprt 自動轉換型別鬧出 Bug ,舉例來說:
在絕大多數的情況下,你不會想要使用鬆散比對,但是在某些情況下,可能會使用它會更為便利,例如當想要比較 null
與 undefined
時,因為它們的值是相等的但型別是不同的,在這個場合下使用 ==
會比較方便,使用鬆散比對可以一次對 null
與 undefined
的結果做比對:
詳細兩者比較上的差異比較圖表可以參考 MDN 的文件:理解相等比較模型 非常齊全。