为什么(false || null)返回null,而(null || false)返回false?

时间:2016-11-26 02:23:12

标签: javascript

为什么false || null返回的结果与null || false不同?

如果myVar为return myVar || falsenull,我可以安全地依赖false返回false,否则会true吗?

所有组合:

false || null

null || false

true || null

null || true

3 个答案:

答案 0 :(得分:12)

JavaScript中的||运算符不一定会返回truefalse。确切的行为是:

如果第一个操作数是真值,它将计算到第一个操作数。否则,它将评估为秒。

如果给出两个布尔值,这可以正常工作,但正如您所注意到的,您也可以将它与任何其他值一起使用。在两个示例中,第一个操作数都是假的。因此,两个表达式都计算到第二个操作数。

注意使用它的一种方法: ||的行为通常用于创建默认参数:

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>

  1. 检查a是否真实。如果是,那么它返回它。如果不是那么它会检查下一个值。
  2. 如果尚未返回值,则无论如何都会返回下一个值。
  3. 另一种写这个的方法是:

    if (a) {
        return a;
    }
    return b;
    

    或者:

    a ? a : b;
    

答案 2 :(得分:1)

基本上你正在做的是:

if (myVar) {
  return myVar;
}
return false;

如果您的表达的第一部分是真实的,您将收到第一部分。否则,你会得到第二部分。它几乎就像一个三元组。

firstPart || secondPart
firstPart ? firstPart : secondPart