此篇透過邏輯運算子切入學習真值(truthy)、假值(falsy)。
邏輯運算子 (Logical Operators)
最常見用途為 if 判斷式
並搭配 比較運算子
一起使用,透過 邏輯運算子
回傳運算結果為 true 或 false。
|| 邏輯運算子 OR
Logical OR:其中一側為 true 就會回傳 true,兩個皆為 false 才會回傳 false。
1 | if (3 === 3 || 1 == '2') { |
&& 邏輯運算子 AND
Logical AND:其中一側為 false 就會回傳 false,兩個皆為 true 才會回傳 true。
1 | if (3 === 3 && 2 == '2') { |
! 邏輯運算子 NOT
Logical NOT:將布林值反向。
將非布林變數自動轉型為布林值的特性,衍伸出另一種用法 !! 將型別轉型為布林
達到和 Boolean(變數)
相同效果。
1 | console.log(!true); // false |
邏輯運算子 tips
- JS 中邏輯運算子僅支援符號寫法,不支援英文寫法。
- 依照權重高低,有優先順序。(運算子優先順序 operator precedence)
真值(truthy)、假值(falsy)
JS 將轉換為布林型別後為 true 的值稱為 真值(truthy)
,false 的值稱為 假值 (falsy)
。
類型定義
- 假值:
- false
- null
- NaN
- 0、-0
- 空字串 (“” 或 ‘’ 或 ``)
- undefined
- 真值:
- 除了上述假值類型
以外
的值都是真值。
- 除了上述假值類型
常見用法:判斷是否有值
在函數前方做資料判斷是否為空的防呆機制,判斷是否為我們預期的資料型別,不是的話 retuen 回去讓程式不再往下執行。
1 | function isAdult(age) { |
運算子並非只能回傳 true、false,在 javascript 中邏輯運算子也能回傳非布林
的值。(有興趣可以參考這篇短路求值介紹,其中有示範操作非布林的值的方法)
真值表:依照嚴格程度排序不同的比較子(紅色最嚴格、灰色最寬鬆)
conclusion
理解優先順序 ! > && > || > ??
邏輯運算子用起來沒煩惱。
1 | console.log(true || false && false) // true → (true || false) |
2.括號內會強制轉型
if 判斷式會將 括號
內變數 強制轉型
成布林值。
1 | if (1) { |