標籤:
準備兩個對象用於下面的討論。
1 var alice = { 2 name: "alice", 3 toString: function () { 4 return this.name; 5 } 6 }; 7 var smith = { 8 name: "smith", 9 toString: function () {10 return this.name;11 }12 }
在 javascript 中,對於 && 不僅僅可以用於 boolean 類型,也不僅僅返回 Boolean 類型的結果。
l 如果第一個運算元是 Boolean 類型,而且值為 false ,那麼直接返回 false。
l 如果第一個運算元是 Boolean 類型,而且值為 true,另外一個運算元是 object 類型,那麼將返回這個對象。
l 如果兩個運算元都是 object 類型,那麼,返回第二個對象。
l 如果任何一個運算元是 null,那麼,返回 null。
l 如果任何一個運算元是 NaN,那麼返回 NaN。
l 如果任何一個運算元是 undefinded,那麼返回 undefined。
1 alert(false && alice); // false 2 alert(true && alice); // alice 3 4 alert(alice && smith); // smith 5 alert(smith && alice); // alice 6 7 alert(null && alice); // null 8 alert(NaN && alice); // NaN 9 alert(undefined && alice); // undefined10 alert(alice && undefined); // undefined
對於 || 來說,同樣也不僅僅用於 Boolean 類型,也不僅僅返回 Boolean 類型的結果。
事實上,null、undefined、NaN 都將被看作 false。而對象被當作 true。
l 如果第一個運算元是 boolean 類型,而且值為 true, 那麼,直接返回 true。
l 如果第一個運算元是 Boolean 類型,而且值為 false ,第二個運算元為 object,那麼返回 object 對象。
l 如果兩個運算元都是 object 類型,那麼返回第一個對象。
l 如果兩個運算元都是 null,那麼,返回 null。
l 如果兩個運算元都是 NaN,那麼返回 NaN。
l 如果兩個運算元都是 undefined,那麼,返回 undefined。
1 alert(false || alice); // alice 2 3 alert(true || alice); // true 4 5 alert(alice || smith); // alice 6 7 alert(smith || alice); // smith 8 9 alert(null || alice); // alice10 11 alert(alice || null); // alice12 13 alert(null || null); // null14 15 alert(NaN || alice); // alice16 17 alert(alice || NaN); // alice18 19 alert(NaN || NaN); // NaN20 21 alert(undefined || alice); // alice22 23 alert(alice || undefined); // alice24 25 alert(undefined || undefined); // undefined
不用搞得這麼複雜 推薦大家看這部分的說明
a && b : 將a, b轉換為Boolean類型, 再執行邏輯與, true返回b, false返回a
a || b : 將a, b轉換為Boolean類型, 再執行邏輯或, true返回a, false返回b
轉換規則:
對象為true
非零數字為true
非Null 字元串為true
其他為false
Javascript 中的 && 和 || 使用小結