js || &&


邏輯運算符通常用於布爾型(邏輯)值;這種情況,它們返回一個布爾型值。然而,&&和||運算符實際上返回一個指定操作數的值,因此這些運算符也用於非布爾型,它們返回一個非布爾型值。

描述EDIT

下面是邏輯運算符的說明:

運算符 示例 說明
邏輯與 (&&) expr1&&expr2 如果expr1 能轉換成false則返回expr1,否則返回expr2. 因此, 在Boolean環境中使用時, 兩個操作結果都為true時返回true,否則返回false.
邏輯或 (||) expr1||expr2 如果expr1能轉換成true則返回expr1,否則返回expr2. 因此,在boolean環境(在if的條件判斷中)中使用時, 二者操作結果中只要有一個為true,返回true;二者操作結果都為false時返回false.
邏輯非(!) !expr 如果單個表達式能轉換為true的話返回false,否則返回true.

能夠轉換為false的表達式有:null,0,""和undefined.

盡管 && 和 || 運算符能夠在非Boolean環境中使用, 但如果他們的返回值能夠轉換成Boolean值的話,也可以認為是Boolean運算.

短路計算

由於邏輯表達式的運算的順序是從左到右,也可以用以下規則進行"短路"計算:

  • false && (anything)  短路計算的結果為false.
  • true || (anything)  短路計算的結果為 true.

該規則確保這些計算的准確性. 注意如果上述表達式中的 anything 部分不能被計算的話,  兩邊都不會生效.還需要注意的是,上述表達式中的 anything 部分是任意的單個邏輯表達式(小括號中).

下面示例代碼中的兩個函數是相等的.

function shortCircuitEvaluation() {
  doSomething() || doSomethingElse()
}

function equivalentEvaluation() {
  var flag = doSomething();
  if (!flag) {
    doSomethingElse();
  }
}

但,由於運算符優先級的存在,下面的表達式的結果卻不相同.右側被小括號括起來的操作變成了獨立的表達式.

false && true || true // 結果為 true false && (true || true) // 結果為 false

邏輯與 (&&)

下面的代碼是 && (邏輯與) 運算符的示例.

a1=true && true       // t && t 結果為 true
a2=true && false      // t && f 結果為 false
a3=false && true      // f && t 結果為 false
a4=false && (3 == 4)  // f && f 結果為 false
a5="Cat" && "Dog"     // t && t 結果為 Dog
a6=false && "Cat"     // f && t 結果為 false
a7="Cat" && false     // t && f 結果為 false

邏輯或 (||)

下面的代碼是 || (邏輯或) 運算符的示例.

o1=true || true       // t || t 結果為 true
o2=false || true      // f || t 結果為 true
o3=true || false      // t || f 結果為 true
o4=false || (3 == 4)  // f || f 結果為 false
o5="Cat" || "Dog"     // t || t 結果為 Cat
o6=false || "Cat"     // f || t 結果為 Cat
o7="Cat" || false     // t || f 結果為 Cat

邏輯非 (!)

下面的代碼是 ! (邏輯非) 運算符的示例.

n1=!true              // !t 結果為 false
n2=!false             // !f 結果為 true
n3=!"Cat"             // !t 結果為 false

轉換規則

將 AND  轉換為 OR

下面涉及到Boolean運算的混合的操作:

bCondition1 && bCondition2
 

與下面的相等:

!(!bCondition1 || !bCondition2)
 

將 OR 轉換為 AND

下面涉及到Boolean運算的混合的操作:

bCondition1 || bCondition2
 

與下面的相等:

!(!bCondition1 && !bCondition2)
 

刪除嵌套的小括號

由於邏輯表達式是從左往右計算的,所以通常可以按照下面的規則刪除小括號.

刪除嵌套的 AND

下面涉及到Boolean運算的混合的操作:

bCondition1 || (bCondition2 && bCondition3)
 

與下面的相等:

bCondition1 || bCondition2 && bCondition3
 

刪除嵌套的 OR

下面涉及到Boolean運算的混合的操作:

bCondition1 && (bCondition2 || bCondition3)
 

與下面的相等:

!(!bCondition1 || !bCondition2 && !bCondition3)

規范EDIT

規范 狀態 說明
ECMAScript 1st Edition. Standard Initial definition.
ECMAScript 5.1 (ECMA-262)
Logical NOT Operator

ECMAScript 5.1 (ECMA-262)
Binary Logical Operators
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Logical NOT operator

ECMAScript 2015 (6th Edition, ECMA-262)
Binary Logical Operators
Standard  

瀏覽器兼容性EDIT

 

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
邏輯與 (&&) (Yes) (Yes) (Yes) (Yes) (Yes)
邏輯或 (||) (Yes) (Yes) (Yes) (Yes) (Yes)
邏輯非 (!) (Yes) (Yes) (Yes) (Yes) (Yes)

 

 

向后兼容: 在 JavaScript 1.0 和 1.1 中的表現

&& 和|| 表達式的行為如下:

運算符 示例 說明
&& expr1 &&expr2 如果第一個表達式(expr1) 能轉換成false, 那么&& 運算會返回false,而不是expr1的值.
|| expr1 ||expr2 如果第一個表達式(expr1) 能轉換成true, 那么|| 運算會返回true,而不是expr1的值.

參考資料EDIT

文檔標簽和貢獻者

 此頁面的貢獻者: yenshenteoliMoltBoy
 最后編輯者: yenshen, Jan 5, 2015, 5:59:05 AM


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM