iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0

在 JavaScript 或 TypeScript 中有一個很特別的比較符號是其他語言所沒有的,那就是 ===

兩個 =

大多數的程式語言,我們都是使用 == 來比較兩個值是否相等,可是在 TypeScript 中,== 稱作一般相等([Loose equality]), 也就是說他在比較的是內容是否相等,不會去管你的型別是否相等(會幫你自動轉換型別的意思)。

我們直接來看例子吧:

100 === "100" // 結果會是 false, 完全不轉換, 比較型別就不相等了

100 == "100"      // 結果會是 true, '10' 會被轉換成 10
true == "1"       // 結果會是 true, true 會轉換成 1, 再把 "1" 轉換成 1
undefined == null // 結果會是 true

從上面的例子來看,我可以發現 == 會自動幫我們轉換型別,他只比較他的 , 所以會有很多狀況是需要考慮的。

也就是說,當字串跟數字相比時,他會嘗試幫你把字串轉換成數字再進行比較,如果轉換失敗,那當然就是 false, 但如果轉換成功,就可以接著比較了。下圖是針對不同型別的轉換比較方式:

一般相等比較方式
節錄自Loose equality using ==

三個 =

相對兩個等於,三個等於(===)就單純多了,他又稱為嚴格比較,也就是說他是比較他的全部。先比較類型在比較。如果類型不相等,那結果就是不相等,不會再去做其他的事情了。這個就很符合我們在 TypeScript 中要給予每個變數型別的意義。

那如果型別相等,他就會去比較他的值是否相等,如果相等才會是 true

不等於

!=!== 類似於 =====

結論

盡可能的使用三個等於(===)或!==,因為這樣一來,如果型別不同就很單純,一定是 false,我們也不需要去記住那些複雜的自動轉換規則,如果真的需要比較,我們可以自己來轉換比較,也會比較單純一些。畢竟,看 code 的時間總是比寫 code 的時間多,=== 可以大大的提高程式的可讀性。


上一篇
第17天-使用更高階的語法 forEach
下一篇
第19天 - "比較" 的雷區
系列文
從零開始進入 JavaScript & TypeScript 的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言