你怎么看这个JavaScript代码? (var1?var2:var3)

时间:2009-09-29 06:19:21

标签: javascript operators

我在JavaScript代码中看到过这种格式,但找不到合理的来源。

编辑后续行动:

感谢所有快速解答!我觉得它就像那样。现在,获得奖励积分:

你能用吗?      (var1?var2)

做与

相同的事情
    if (var1) {
        var2
    }

6 个答案:

答案 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

在这里阅读更多内容

Conditional Operator

  

条件运算符是唯一的   需要三个的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了解详细信息......