iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 11
2
Modern Web

JavaScript 原力覺醒 - 成為絕地武士之路系列 第 11

JS 原力覺醒 Day11 - Falsy / Truthy

上一章節的強制轉型,在布林值轉換的部分有提到 Truthy 與 Falsy ,這個特性我們應該常常碰到,至於背後的運作邏輯如何,今天就讓我們來看看吧:

Outline

  • 使用布林值自動轉型的情境
  • Falsy
  • Truthy
  • 嚴格比較與寬鬆比較

布林值自動轉型的情境

再有多重條件的情況下,那我們寫程式的時候常常用到這樣子的寫法:

if(isTrue) {
	// if isTrue is equal to true 
} else {
	isTrue) {
	// if isTrue is equal to false
} 

while(isTrue){
	// if isTrue is equal to true 
} 

isTrue ? true : false 

邏輯判斷是大概是 JS 裡面最常用到的語法了,而因為 JS 是這個寬鬆靈活的語言,甚至我們寫在判斷式括號內的數值都不一定要是布林值,也可以是物件或字串。因為裡面的值會被 JS 自動轉型,這有點像是用兩個等號來做的寬鬆比較:

if(isTrue) 
//is like 
isTrue == true 

至於邏輯區塊裡面的數值是依照怎麼樣的規則被轉型成為布林值,那就是我們需要探討的部分。

Falsy

在 JavaScript 裡面,每個數值都有其對應的布林值,也因而形成了接下來要提到的轉型邏輯,其在轉型的情況下,ㄧ定會被判斷為 false ,也就是說,與 false 等價,讓我們先來認識一下:

  • 0
  • NaN
  • '' (空字串)
  • false
  • null
  • undefined

Truthy

至於 truthy ,情況就比較多了,到底有多多呢?可以用一句話來解釋:「 除了 falsy 以外的值都是 truthy 」,也就是說只要知道上面 falsy 的值有哪些,就可以知道 truthy 的值有哪些囉! 下面都是 truthy 的狀況:

  • '0' ( 一個內容為 0 的字串 )
  • 'false' ( 一個內容為 false 的字串 )
  • [] ( 空陣列 )
  • {} (空物件)
  • function(){} (空函式)

嚴格比較與寬鬆比較

上一章節為什麼說要盡量使用全等於,這邊說明一下,因為使用兩個等號 == 來比較的時候會觸發自動轉型,而其中就會有比較複雜的轉型邏輯,所以你會比較難以判斷比較的結果。我的建議是,盡量在你需要比較某數值的時候使用全等於(===),也就是嚴格比較,而只在需要判斷某物件是否存在時,才依賴自動轉型。 附上使用兩種判斷方式,分別會產生的結果值,你就會知道為什麼 (圖片來自這個 Repo):

  • ==

https://ithelp.ithome.com.tw/upload/images/20190926/20106580dRJICx6KM2.png

  • ===

    可以看出如果使用全等於,除非等號兩邊的數值完全相同,不然不可能得到 true

    https://ithelp.ithome.com.tw/upload/images/20190926/20106580RfSTvPvXGp.png


上一篇
JS 原力覺醒 Day010 - 自動轉型 (Coercion)
下一篇
JS 原力覺醒 Day12- 傳值呼叫、傳址呼叫
系列文
JavaScript 原力覺醒 - 成為絕地武士之路30

尚未有邦友留言

立即登入留言