JS邏輯運算符&&與||的短路運算


最近看到一個360面試題,題目如下:

      下面代碼的輸出值是?

   alert(1&&2);

正確的結果是 2.


1.后來仔細研究了一下JS邏輯運算的相關內容,在MDN上面找到相應描述:

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

運算符 示例 說明
邏輯與 (&&) 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的表達式有:false,""(空字符串),0和NaN,null,undefined.

能夠轉化為true的值為:true,任何非空字符串,任何非零數字值(包括無窮大),任何對象

以上規則已經再次確認,摘自"javascript高級程序設計(第3版)"這本書

 

也就是說在面試題中,第一個值為1,類型是number,該值沒有辦法轉化為false,於是返回第二個值也就是2,這樣就可以理解了.

 

2. 另外JS邏輯計算還有一個短路計算原則,MDN描述如下:

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

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

3.一些簡單邏輯運算例子理解

(1)邏輯與

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
a8 = true && 4 && "aaa"; //結果為"aaa"

(1)邏輯或

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



 

 

 

 


免責聲明!

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



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