一、&&/||返回可以被轉換爲布爾值的值數組
&&操做符不必定返回布爾值true/false,但老是返回一個能轉換爲布爾值的值,這決定於用於比較的是什麼值。函數
非0數字轉爲true,數字0轉爲false,null、undefined轉爲false,對象、數組、函數表達式、非空字符串轉爲true,空字符轉爲false,函數執行時返回計算結果。對象
注意即便是空數組或不含任何屬性的對象都返回true。字符串
含有NaN類型的比較返回NaN。io
&&的操做順序是從左至右,當左邊的計算值爲false或轉換後的值爲false時,右邊的值計算值將再也不比較。console
function t(){
return 0 && -1;
}
console.log(t());function0co
上式中,0 && –1邏輯與比較,由於0轉換爲布爾值爲false,所以,-1再也不計算比較,只計算左邊的值--0。block
console.log(function(){} && -1);字符
-1
特殊狀況:
console.log(NaN && -1);
NaN
console.log([] && -1);
-1
若是邏輯與比較左邊的運算結果爲true,則返回最後一位比較結果。
console.log(true && {} && 0);
0
最後的結果爲0,由於0轉換爲布爾值爲false。所以在判斷中
if(true && {} && 0)
alert(‘ok’);
else
alert(‘fail’);
中,將彈出fail。
二、邏輯運算符在實際中的運用
同行執行多個計算:
fun1() && fun2();
若是fun1運算結果爲true,則繼續執行fun2,它不計較fun2最後返回的是什麼結果。
var aa = aa || 1;
console.log(aa);1
這利用了||會返回結果的特性。若是aa已定義,則返回aa定義的值,若是沒有,則返回數字1。
var a = 1 && [];
console.log(a);[]
若是一個函數不返回結果,則默認返回undefined。
function Y(){
}
console.log(Y());undefined