2016-11-26 164 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; 
相關問題