JavaScript邏輯運算子相關總結
前言
關於 JavaScript 中的邏輯運算子,我們經常使用卻可能不知道它的一些機制和用法。
機制
首先我們需要知道幾種邏輯運算子的優先順序是不同的(關於完整的運算子優先順序,看運算子優先順序),邏輯非>邏輯與>邏輯或>條件運算子(三目運算子)。運算順序條件運算子是從右向左,而邏輯與和邏輯或都是從左向右。
//表示式的優先順序導致結果不同 false && true || true // 結果為 true false && (true || true) // 結果為 false
邏輯運算表示式返回的是字表達式的值,而不是一個 Boolean
if
語句等。
邏輯運算子通常用於布林型(邏輯)值。這種情況下,它們返回一個布林值。然而, && 和 || 運算子會返回一個指定運算元的值,因此,這些運算子也用於非布林值。這時,它們也就會返回一個非布林型值。
邏輯與 expression1 && expression2
的機制是,如果 expression1
能夠轉換為 true
那麼返回 expression2
,否則返回 expression1
。
邏輯或 expression1 || expression2
的機制是,如果 expression1
true
那麼返回 expression1
,否則返回 expression2
。
邏輯非 !expression
,若 expression
能夠轉化為 true
則返回 false
,否則返回 true
。
expression 可能是任何一種型別,不一定是布林值。
會被轉化為 false
的表示式有:
- null
- NaN
- 0
- 空字串("" or '' or“` “ “`)
- undefined
需要特別注意的是
undefined
,有些表示式返回的是undefined
,比如沒有設定return
的函式執行的返回值就是undefined
。
儘管 &&
||
運算子能夠使用非布林值的運算元,但它們依然可以被看作是布林操作符,因為它們的返回值總是能夠被轉換為布林值。如果要顯式地將它們的返回值(或者表示式)轉換為布林值,請使用雙重非運算子(即!!
)或者 Boolean
建構函式。
雙重非運算子
!!
可以將任意值強制轉換為布林值,在需要條件判斷的地方經常使用。
短路計算
邏輯運算的機制還存在短路計算:
(some falsy expression1) && (expression2)
短路計算的結果為假。(some truthy expression1) || (expression2)
短路計算的結果為真。
短路意味著上述表示式中的 expression2
部分不會被執行,因此 expression2
的任何副作用都不會生效(舉個例子,如果 expression
是一次函式呼叫,這次呼叫就不會發生)。造成這種現象的原因是,整個表示式的值在第一個運算元被計算後已經確定了。
用法
利用 javascript
中邏輯運算子支援任意型別和短路計算的特性我們可以將邏輯運算子運用到一些特殊的地方。
邏輯與
邏輯與可以用來獲得第一個假值,比如 expr1 && expr2 && expr3
,當其中存在假值的時候會被返回。也可以類推至前面的表示式都為真的時候執行最後一個表示式來簡化判斷邏輯的程式碼,比如 x > 0 && a()
,這可以代替 if
語句。
邏輯或
邏輯或可以用來設定預設值,比如你的函式需要使用者輸入一個引數,如果使用者沒有輸入則給定一個預設值。this.a = param || {}
。
以上就是JavaScript邏輯運算子相關總結的詳細內容,更多關於JavaScript邏輯運算子的資料請關注我們其它相關文章!