为什么(假||空)返回null,而(空||假)返回false?
问题描述:
为什么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
- 它检查a是否是真的。如果是,则返回。如果不是,则检查下一个值。
- 如果它还没有返回一个值,那么无论如何它都会返回下一个值。
另一种方式来写是这样的:
if (a) {
return a;
}
return b;
或者:
a ? a : b;
http://es5.github.io/#x11.11上规范一些可能有用的阅读。 – CollinD