为什么false || null
返回的结果与null || false
不同?
如果myVar为return myVar || false
或null
,我可以安全地依赖false
返回false,否则会true
吗?
所有组合:
false || null
空
null || false
假
true || null
真
null || true
真
答案 0 :(得分:12)
JavaScript中的||
运算符不一定会返回true
或false
。确切的行为是:
如果第一个操作数是真值,它将计算到第一个操作数。否则,它将评估为秒。
如果给出两个布尔值,这可以正常工作,但正如您所注意到的,您也可以将它与任何其他值一起使用。在两个示例中,第一个操作数都是假的。因此,两个表达式都计算到第二个操作数。
注意使用它的一种方法: ||
的行为通常用于创建默认参数:
function foo(optionalArg) {
optionalArg = optionalArg || "default!";
console.log(optionalArg);
}
foo("test");
foo();
如果省略optionalArg
,则其值隐式变为undefined
。由于undefined
是假的,undefined || "default!"
评估为"default!"
。请注意,如果您传递假名值(例如0
或""
),则此默认args样式可能会适得其反。明确检查undefined
更加健壮。在ECMAScript 6中,您可以使用参数列表中的默认值来更加可读:
function foo(optionalArg = "default!") {
console.log(optionalArg);
}
foo("test");
foo(false);
foo(undefined);
foo();
答案 1 :(得分:2)
当你有||时在两个变量之间发生以下情况。
示例:a || B'/ P>
另一种写这个的方法是:
if (a) {
return a;
}
return b;
或者:
a ? a : b;
答案 2 :(得分:1)
基本上你正在做的是:
if (myVar) {
return myVar;
}
return false;
如果您的表达的第一部分是真实的,您将收到第一部分。否则,你会得到第二部分。它几乎就像一个三元组。
firstPart || secondPart
firstPart ? firstPart : secondPart