为什么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