當運算元都是布林值時,「&&」會對兩個值執行布林與(AND)操作。
關係運算子的優先順序比」&&」要高。
”&&「可以對真值和假值進行布林與(AND)操作。 (假值有false、null、undefined、0、NaN和”“)。在JS中任何希望使用布林值的地方,表達式和語句都會將其當做真值或假值來對待,因此實際上」&&」並不總是傳回true和false。
當運算子要傳回一個真值或假值時,根據左運算元的值會遇到兩種運算情況:運算子先計算左運算元的值,如果計算結果是假值,那麼整個表達式的結果一定也是假值,此時”&&“簡單的返回左操作數的值,而不會對右操作數進行計算。如果左操作數是真值,」&&「將計算右操作數的值並將其傳回作為整個表達式的計算結果。
var o = {x:1};
p && p.y; // =>null: p是假值,將其傳回,而不去計算p.y
」&&「的行為有時稱作」短路「,我們將會看到很多程式碼利用了這一特性進行有條件地執行程式碼。例如下面兩行程式碼是完全等價的:
if(a == b) stop(>
if(a == b) stop(>
用來從一組備選表達式中選出第一個真值表達式:
複製程式碼 程式碼如下:// 先檢查a是否為真值,如果是,返回a,否則和a處理方式相同地處理b// 如果b是真值返回b,否則返回5var max = a || b || 5; 這種用法在函數中可以用來給參數預設值: 複製程式碼 程式碼如下:function copy(o, p) { = p || {}; // 如果沒有向參數p傳遞對象,就使用新建立的對象// ...} 運算子優先權 同一優先權的運算符,運算次序由結合方向決定。 簡單記就是:! > 算術運算子 > 關係運算子 > && > || > 賦值運算子