【问题标题】:How do you read this JavaScript code? (var1 ? var2:var3)你如何阅读这段 JavaScript 代码? (var1 ? var2:var3)
【发布时间】:2010-12-02 05:29:18
【问题描述】:

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

编辑跟进:

感谢所有快速回答!我想是这样的。现在,对于奖励积分:

你能用吗 (var1 ? var2)

做同样的事情

    if (var1) {
        var2
    }

?

【问题讨论】:

  • 不,你不能。您还必须指定 else 条件。
  • 关于您的编辑,您将得到的最接近的是:if (var1) stmt; 在单行上。
  • var1 ? var2() : 无效(0);
  • @Salman 为了可读性,我会避免这种结构
  • 对不起兄弟。我想也许我会睡一觉,醒来时和女儿一起看芝麻街。您提醒我 Stack Overflow 更为重要。我向你道歉并向你保证我为自己感到羞耻。

标签: javascript operators


【解决方案1】:

它是一个条件运算符。

如果 var1 则 var2 否则 var3

在这里阅读更多

Conditional Operator

条件运算符是唯一的 需要三个的 JavaScript 运算符 操作数。该运营商经常 用作 if 的快捷方式 声明。

【讨论】:

  • -1。这确实是走错路了。您不希望值表达式修改任何内容,您只希望整个表达式的值是 true 侧的值或 false 侧的值,这就是此运算符的目的。
  • @phoenix 也许您的示例并未准确显示条件运算符的有用用法。可以简化为var xCon = num == 1;
  • var 随便 = num
【解决方案2】:
if(var1) {
    var2;
else {
    var3;
}

【讨论】:

    【解决方案3】:

    这似乎是一种三元运算。 if else 操作的简写形式,可以这么说。详情请查看here...

    【讨论】:

      【解决方案4】:

      如果var1 被认为具有等于true 的值,则表达式var1 ? var2 : var3 返回var2 的值,否则返回var3 的值。

      请注意,这与以下内容并不完全相同:-

      if (var1)
         varX = var2
      else
         varX = var3
      

      由于上述构造本身不能作为更大表达式的一部分出现。

      在三元表达式中,众所周知,? : 应该避免让组件表达式产生副作用,而不是 ++ 或 -- 运算符的副作用。例如,这不是一个好主意:-

      varX = var1 ? doSomethingSignificant() : doSomethingElseSignificant();
      

      在这种情况下,最好使用if else 构造。手上:-

      varX = var1 ? calcSomething(var2) : someOtherCalc(var2);
      

      这是可以接受的,前提是被调用的函数本身不会显着修改程序状态。

      编辑

      我想我需要再次强调这一点。 不要使用三元运算符作为if 语句的捷径。两者有不同的目的。如果您的代码中充满了? :,那应该是if else,它将难以阅读。我们希望 逻辑流 出现在 if 语句中。当表达式有一个简单的逻辑组件时,我们期望? :。注意 表达式 不会修改事物,只有赋值时它们的结果才应该修改事物。

      【讨论】:

      • 我认为说明最后一部分的一种更简单的方法是:三元运算符的工作是根据条件等于一个值或另一个,而 JavaScript 中的 if 语句根本不产生任何价值——他们的工作是执行代码
      • @Chuck:这更简单,但是没有理由为什么表达式不应该在三元运算符中执行代码,这就是代码的作用(或更重要的是不这样做)那很重要。理想情况下,程序状态不应该因为正在计算的表达式而改变。
      【解决方案5】:

      它被称为 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 中是没有意义的。

      【讨论】:

      • 我认为你的第一个 == 是一个错字。
      • 另外两位代码也不等价,因为第二位前面应该有“var result;”
      • @eyelidlessness——显然我不应该被允许在早上 7.30 之前编码。我昨天在 SO 上犯了同样的 == vs = 错误。感谢您指出这些。
      • 在你喝完第一杯咖啡之前永远不要编程。 :)
      【解决方案6】:

      作为第一个问题的附录,您也可以使用

        var result = (condition) && var1 || var2;
      

      得到同样的结果

      对于第二个问题,在 C 中也可以使用以下方法:

        (condition) && someinstruction;
      

      但这似乎不适用于 javascript(至少在我的 firefox 版本中)。

      【讨论】:

      • 是的,它应该可以工作。只有当condition 具有真实值时,(condition) && someinstruction; 才应该评估 someinstruction
      猜你喜欢
      • 2015-06-17
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多