爲什麼false || null
返回不同的結果比null || false
?爲什麼(假||空)返回null,而(空||假)返回false?
我可以安全地依賴return myVar || false
返回false如果myVar的或者是null
或false
,但true
否則?
所有組合:
false || null
空
null || false
假
true || null
真正
null || true
真正
爲什麼false || null
返回不同的結果比null || false
?爲什麼(假||空)返回null,而(空||假)返回false?
我可以安全地依賴return myVar || false
返回false如果myVar的或者是null
或false
,但true
否則?
所有組合:
false || null
空
null || false
假
true || null
真正
null || true
真正
的||
運營商在JavaScript不一定返回true
或false
。這是確切的行爲是這樣的:
如果第一個操作truthy,它的計算結果爲第一個操作數。否則,它評估到第二個。
可正常工作給出了兩個布爾值,但正如你已經注意到了,你也可以與任何其他值使用。在你的兩個例子中,第一個操作數是falsey。因此,這兩個表達式都評估爲第二個操作數。
備註單程這是用來:的||
行爲經常被用來創建默認參數:
function foo(optionalArg) {
optionalArg = optionalArg || "default!";
console.log(optionalArg);
}
foo("test");
foo();
如果optionalArg
被省略,它的值隱含成爲undefined
。由於undefined
有錯,undefined || "default!"
評估爲"default!"
。請注意,如果您傳遞錯誤值(如0
或""
),則此類默認參數會適得其反。明確檢查undefined
更爲可靠。當你有
function foo(optionalArg = "default!") {
console.log(optionalArg);
}
foo("test");
foo(false);
foo(undefined);
foo();
||:在ECMAScript中6,你可以用參數列表中的默認值,這樣做是爲了更可讀在兩個變量之間發生以下情況。
例如:a || b
另一種方式來寫是這樣的:
if (a) {
return a;
}
return b;
或者:
a ? a : b;
http://es5.github.io/#x11.11上規範一些可能有用的閱讀。 – CollinD