我见过这种格式用于JavaScript的代码,但找不到一个好的意思来源。你如何阅读这段JavaScript代码? (var1?var2:var3)
编辑为后续行动:
感谢您的所有快速答案!我觉得是这样的。现在,奖励积分:
可以使用 (VAR1 VAR2?)
做同样的事情
if (var1) {
var2
}
?
我见过这种格式用于JavaScript的代码,但找不到一个好的意思来源。你如何阅读这段JavaScript代码? (var1?var2:var3)
编辑为后续行动:
感谢您的所有快速答案!我觉得是这样的。现在,奖励积分:
可以使用 (VAR1 VAR2?)
做同样的事情
if (var1) {
var2
}
?
它被称为ternary(因为它有三个操作数)条件(因为它是一个的if/else /再)操作。
据计算为一个值,所以通常会使用它分配一个值,如:
var result = condition ? value1 : value2;
即相当于:
var result;
if (condition == true) {
result = value1;
} else {
result = value2;
}
一个例子:
var message = "Length is " + len + " " + (len==1 ? "foot" : "feet");
注意?:
是完整的运营商。它不是?
和:
运算符,因此?
本身在Javascript中没有意义。
我认为你的第一个==是一个错字。 – eyelidlessness 2009-09-29 06:31:07
此外,代码的两位不等效,因为第二位应该在“var result”之前。 – eyelidlessness 2009-09-29 06:51:07
@eyelidlessness - 显然我不应该在7.30AM之前编码。我昨天对SO做了同样的== vs =错误。感谢您指出这些。 – 2009-09-29 07:10:14
它是一个条件运算符。
这是
如果VAR1然后VAR2其他VAR3
在这里阅读更多
条件运算符是唯一 JavaScript的运算符需要三个 操作数。该运算符通常是 ,用作if语句的快捷键。
我可以知道投票的原因吗? – rahul 2009-09-29 06:36:34
-1。这确实是在采取错误的方针。你不希望值表达式修改任何东西,你只是希望整个表达式的值可以是真正的一侧的值,也可以是假的一侧的值,这就是这个操作符的目的。 – AnthonyWJones 2009-09-29 06:36:55
@phoenix也许你的例子并没有完全显示条件运算符的有用用法。它可以简化为'var xCon = num == 1;' – CMS 2009-09-29 06:49:09
if(var1) {
var2;
else {
var3;
}
这似乎是一种三元操作。可以这么说,其他操作的简写形式。检查here了解详细信息...
表达var1 ? var2 : var3
如果var1
被认为具有等价于true
其他的值返回的var3
德值返回var2
值。
注意这不是完全一样: -
if (var1)
varX = var2
else
varX = var3
由于上述构建体不能将其自身表现为较大的表达式的一部分。
在表达式中,因为已知? :
,应避免允许组件表达式具有除++或 - 运算符的副作用以外的副作用。例如,这是不是一个好主意: -
varX = var1 ? doSomethingSignificant() : doSomethingElseSignificant();
在这种情况下,它会更好地使用if else
结构。一方面: -
varX = var1 ? calcSomething(var2) : someOtherCalc(var2);
这是可以接受的,假设被调用函数本身并不显着修改程序状态。
编辑:
我想我需要重新加强了这一点。做不是使用三元运算符作为简化语句的方法来简化if
。两者有不同的目的。如果您的代码充满? :
应该是if else
这将很难阅读。我们预计逻辑流程将出现在if
语句中。当存在表达式的简单逻辑组件时,我们期望? :
。注表达式不要修改的东西只有他们的结果,当分配应该修改的东西。
我认为一种简单的方式来说明最后一部分是:三元运算符的工作是根据条件**等于一个值或另一个**,而如果Javascript中的语句根本不产生任何值 - 他们的工作是**执行代码**。 – Chuck 2009-09-29 07:34:47
@Chuck:这很简单,但是没有理由说明为什么表达式不应该在三元运算符中执行代码__,它的代码的功能(或者更重要的一点)非常重要。理想情况下,程序状态不应因表达式被评估而改变。 – AnthonyWJones 2009-09-29 08:09:13
至于第一个问题的增编,您也可以使用
var result = (condition) && var1 || var2;
,并获得相同的结果
对于第二个问题,在C以下的工作太:
(condition) && someinstruction;
,但似乎并没有在JavaScript(至少与我的版本的Firefox)工作。
是的,它应该工作。 '(condition)&& someinstruction;'只有'condition'具有真值时才应该评估'someinstruction'。 – kangax 2009-09-29 12:38:51
不,你不能。你还必须指定else条件。 – rahul 2009-09-29 06:32:06
关于你的编辑,你会得到最接近的是:'if(var1)stmt;'在一行上。 – 2009-09-29 07:12:44
var1? var2():void(0); – 2009-09-29 07:33:48