普通情況下的 && 和 || 比較簡單,這里不進行討論。
準備兩個對象用于下面的討論。
代碼如下:
var alice = {
name: "alice",
toString: function () {
return this.name;
}
}
var smith = {
name: "smith",
toString: function () {
return this.name;
}
}
在 javascript 中,對于 && 不僅僅可以用于 boolean 類型,也不僅僅返回 Boolean 類型的結果。
l 如果第一個操作數是 Boolean 類型,而且值為 false ,那么直接返回 false。
l 如果第一個操作數是 Boolean 類型,而且值為 true,另外一個操作數是 object 類型,那么將返回這個對象。
l 如果兩個操作數都是 object 類型,那么,返回第二個對象。
l 如果任何一個操作數是 null,那么,返回 null。
l 如果任何一個操作數是 NaN,那么返回 NaN。
l 如果任何一個操作數是 undefinded,那么返回 undefined。
alert(false && alice); // false
alert(true && alice); // alice
alert(alice && smith); // smith
alert(smith && alice); // alice
alert(null && alice); // null
alert(NaN && alice); // NaN
alert(undefined && alice); // undefined
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。
alert(false || alice); // alice
alert(true || alice); // true
alert(alice || smith); // alice
alert(smith || alice); // smith
alert(null || alice); // alice
alert(alice || null); // alice
alert(null || null); // null
alert(NaN || alice); // alice
alert(alice || NaN); // alice
alert(NaN || NaN); // NaN
alert(undefined || alice); // alice
alert(alice || undefined); // alice
新聞熱點
疑難解答
圖片精選