我在JavaScript代码中看到过这种格式,但找不到合理的来源。
编辑后续行动:
感谢所有快速解答!我觉得它就像那样。现在,获得奖励积分:
你能用吗? (var1?var2)做与
相同的事情 if (var1) {
var2
}
答案 0 :(得分:17)
它被称为 ternary (因为它有三个操作数)条件(因为它是if / else / then)运算符强>
它被计算为一个值,因此您通常会使用它来赋值,例如:
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中毫无意义。
答案 1 :(得分:6)
它是一个条件运算符。
是
如果var1则var2 else var3
在这里阅读更多内容
条件运算符是唯一的 需要三个的JavaScript运算符 操作数。经常这个操作员 用作if的快捷方式 言。
答案 2 :(得分:2)
if(var1) {
var2;
else {
var3;
}
答案 3 :(得分:2)
如果var1 ? var2 : var3
被视为具有等同于var2
的值,则表达式var1
将返回true
的值,否则返回值var3
。
请注意,这与: -
不完全相同if (var1)
varX = var2
else
varX = var3
由于上述构造本身不能作为更大表达式的一部分出现。
在ternery表达中,当? :
已知时,应该避免允许组件表达式具有副作用,而不是++或 - 运算符的副作用。例如,这不是一个好主意: -
varX = var1 ? doSomethingSignificant() : doSomethingElseSignificant();
在这种情况下,最好使用if else
构造。在手上: -
varX = var1 ? calcSomething(var2) : someOtherCalc(var2);
这是可以接受的,假设被调用的函数本身不会显着修改程序状态。
修改强>:
我想我需要重新强化这一点。 不使用三元运算符作为快捷if
语句的方法。两者有不同的目的。如果您的代码已满? :
,那么应该if else
,这将很难阅读。我们希望逻辑流程出现在if
语句中。当表达式有一个简单的逻辑组件时,我们期望? :
。注意表达式不会修改内容,只有在分配时才能修改它们的结果。
答案 4 :(得分:2)
作为第一个问题的附录,您也可以使用
var result = (condition) && var1 || var2;
并获得相同的结果
对于第二个问题,在C中,以下也适用:
(condition) && someinstruction;
但这似乎不适用于javascript(至少使用我的firefox版本)。
答案 5 :(得分:1)
这似乎是一种三元手术。 if else操作的简短形式,可以这么说。检查here了解详细信息......