1. 程式人生 > >js中的短路運算子

js中的短路運算子

   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