在 JavaScript 或 TypeScript 中有一個很特別的比較符號是其他語言所沒有的,那就是
===
。
大多數的程式語言,我們都是使用 ==
來比較兩個值是否相等,可是在 TypeScript 中,==
稱作一般相等([Loose equality]), 也就是說他在比較的是內容是否相等,不會去管你的型別是否相等(會幫你自動轉換型別的意思)。
我們直接來看例子吧:
100 === "100" // 結果會是 false, 完全不轉換, 比較型別就不相等了
100 == "100" // 結果會是 true, '10' 會被轉換成 10
true == "1" // 結果會是 true, true 會轉換成 1, 再把 "1" 轉換成 1
undefined == null // 結果會是 true
從上面的例子來看,我可以發現 ==
會自動幫我們轉換型別,他只比較他的 值, 所以會有很多狀況是需要考慮的。
也就是說,當字串跟數字相比時,他會嘗試幫你把字串轉換成數字再進行比較,如果轉換失敗,那當然就是 false
, 但如果轉換成功,就可以接著比較了。下圖是針對不同型別的轉換比較方式:
相對兩個等於,三個等於(===
)就單純多了,他又稱為嚴格比較,也就是說他是比較他的全部。先比較類型在比較值。如果類型不相等,那結果就是不相等,不會再去做其他的事情了。這個就很符合我們在 TypeScript 中要給予每個變數型別的意義。
那如果型別相等,他就會去比較他的值是否相等,如果相等才會是 true
。
!=
與 !==
類似於 ==
與 ===
盡可能的使用三個等於(===
)或!==
,因為這樣一來,如果型別不同就很單純,一定是 false
,我們也不需要去記住那些複雜的自動轉換規則,如果真的需要比較值,我們可以自己來轉換比較,也會比較單純一些。畢竟,看 code 的時間總是比寫 code 的時間多,===
可以大大的提高程式的可讀性。