js中的短路運算子
阿新 • • 發佈:2019-02-17
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