2012-01-16 44 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"