2016-11-26 165 views

回答

9

||运营商在JavaScript不一定返回truefalse。这是确切的行为是这样的:

如果第一个操作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();

+0

虽然在这种情况下,我会主张'函数foo(optionalArg ='default')'以获得更多的语义,可读性码。 – David

+0

否@David,尝试'foo(null)'并且看到它不会以'default'结果 – Endless

+0

@Endless你是正确的,但是在这种情况下你没有要求默认参数。您已经显式传入null。 – David

1

基本上你正在做的事情是:

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

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

firstPart || secondPart 
firstPart ? firstPart : secondPart 
+0

如果myVar不真实,它不会返回false。它返回另一个变量。 – kjonsson

+1

@kjonsson在OP代码的情况下,“其他变量”是“false” – 4castle

2

||:在ECMAScript中6,你可以用参数列表中的默认值,这样做是为了更可读在两个变量之间发生以下情况。

例如:a || b

  1. 它检查a是否是真的。如果是,则返回。如果不是,则检查下一个值。
  2. 如果它还没有返回一个值,那么无论如何它都会返回下一个值。

另一种方式来写是这样的:

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

或者:

a ? a : b; 
相关问题