2012-01-16 78 views
63

我知道,在PHP 5.3,而不是使用這種冗餘三元操作的語法:的Javascript速記三元運算

startingNum = startingNum ? startingNum : 1 

...我們可以使用簡寫語法爲我們的運營商三元適用:

startingNum = startingNum ?: 1 

而且我知道在JavaScript三元運算符:

startingNum = startingNum ? startingNum : 1 

...但有一個shortha第二?

謝謝你們!

回答

102
var startingNumber = startingNumber || 1; 

這樣的事情你在找什麼,如果未定義它默認的地方?

var foo = bar || 1; // 1 
var bar = 2; 
foo = bar || 1;  // 2 

順便說一句,這個工程的很多場景,包括對象:

var foo = bar || {}; // secure an object is assigned when bar is absent 
+1

我認爲這是C# – 2012-01-16 17:47:00

+0

的確是被今早反彈。修正了,但感謝您的注意。 – 2012-01-16 17:47:22

+1

你不是指'''而不是'''? – 2012-01-16 17:47:23

13

||將返回它遇到的第一個truthy值,因此可以用作合併運算符,類似到C#的??

startingNum = startingNum || 1; 
+0

@Web_Designer - 沒問題。 – 2012-01-16 17:50:58

+0

我比其他人更喜歡你的解釋 – ajax333221 2012-01-17 18:20:35

+0

@ ajax333221 - 謝謝! – 2012-01-17 18:21:16

10

是的,有:

var startingNum = startingNum || 1; 

一般而言,expr1 || expr2作品以下面的方式(如通過the documentation提及):

返回expr1,如果它可以被轉換爲true;否則,返回expr2因此,當與Boolean值一起使用時,||返回true,如果任一操作數是true;如果兩者都是false,則返回false

+0

如果a是真的,而如果a被評價爲真,那麼說這樣更正確嗎? – JaredPar 2012-01-16 17:54:15

+3

@JaredPar:爲了避免混淆,我用Mozilla Developer Network中的原始詳細解釋替換了原來的詳細解釋。它應該不太模糊。 – Tadeck 2012-01-16 18:00:16

1
var startingNum = startingNum || 1; 

在這種情況下,你可以使用OR運算符。

0

上述答案是正確的。在JavaScript中,下面的語句:

startingNum = startingNum ? otherNum : 1 

可以表示爲

startingNum = otherNum || 1 

這裏沒有涉及到另一種情況是,如果你想不匹配時,值返回false。 JavaScript的簡寫,這就是:

startingNum = startingNum ? otherNum : 0 

但它可以表示爲

startingNum = startingNum && otherNum 

只是想覆蓋的情況下別人另一種情形是尋找一個更廣義的答案。

0
startingNum = startingNum || 1 

如果你有一個空的條件,像

startingNum = startingNum ? startingNum : null 

您可以使用 '& &'

startingNum = startingNum && startingNum 
0

爲了使三元這樣的:

boolean_condition ? true_result : false_result 

在JavaScript中,你可以這樣做:

(boolean_condition && true_result) || false_result; 

例子:

(true && 'green') || 'red'; 
=> "green" 
(false && 'green') || 'red'; 
=> "red"