2013-10-23 45 views
1

我不知道這兩個是不同的嗎?速記if/else語句:foo?foo:bar vs foo ||吧

var hello = foo?foo:bar; 

VS

var hello = foo || bar; 

你能解釋一下嗎?和一些案例的例子?或兩者是相同的?

PS:富/酒吧應該是所有喜歡串/ INT/OBJ /布爾...

+0

所有可能的,booleand .. string .. int .. obj .. @JonathonReinhart – l2aelba

回答

6

? :稱爲條件運算它採用三個參數(這就是爲什麼它有時被稱爲「三元「運營商):測試的東西,如果測試是真的會返回的東西,如果測試是假的,則返回一些東西*

第二個是JavaScript的curiously-powerful logical OR operator。它接受兩個參數。它評估第一個操作數,如果這真的是真的,則返回它;如果第一個是僞造的,則它評估並返回第二個操作數。

因此,這兩者之間的差異是這樣的:對於條件運算符,foo可能會被評估兩次(如果它是真的)。對於||foo僅進行一次評估。這並不重要,如果foobar只是簡單的變量引用,但考慮:

var hello = foo() ? foo() : bar(); 
// vs 
var hello = foo() || bar(); 

你可以看到它是如何重要多少倍foo()進行評估,如果這樣做任何顯著的工作或有任何side effects


(*那麼,什麼是 「truthy」 和 「falsey」 值嗎? 「falsey」 值0""NaNundefinednull,當然false人,其他都是 「truthy」。)

+0

很好的解釋!謝謝 – l2aelba

相關問題