【问题标题】:Does the "condition" (? :) operator work in JavaScript as in C?“条件” (? :) 运算符在 JavaScript 中是否像在 C 中一样工作?
【发布时间】:2011-05-06 18:44:06
【问题描述】:

例子:

var x, y, z;
//...
x > 100 ? y = x : z = x ;

【问题讨论】:

    标签: javascript c operators ternary-operator conditional-operator


    【解决方案1】:

    这是一种不同的方法。您可以使用三元将变量选择为方括号内的字符串。

    这个window 假定yz 是全局的。否则,您需要提供正确的上下文。

    window[x > 100 ? 'y' : 'z'] = x;
    

    【讨论】:

      【解决方案2】:

      这应该会帮助你(将来):

      https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence

      首先将评估 > 比较,因为它的优先级为 8。?: 的优先级为 15,低于 = 的 16。这意味着三元运算符将在任何赋值之前运行(即第一个操作数,条件,将被评估,然后只选择一个分支)。

      也是一个简单的测试

      //x = 50;
      x = 200;
      x > 100 ? y = x : z = x ;
      alert((typeof y)+'|'+(typeof z));
      

      会回答你的问题。

      【讨论】:

        【解决方案3】:

        是的,虽然运算符优先级总是很棘手,但它的工作原理是一样的,所以我建议使用括号以避免混淆。

        切线相关..
        您还可以在 JavaScript 中使用 ||,类似于 C# 中的空合并运算符 ??

        【讨论】:

          【解决方案4】:

          是的,根据conditional operator Wikipedia 文章和ECMA-262 标准(请参阅第 11.12 节)。

          【讨论】:

            【解决方案5】:

            是的,三元运算符在 Javascript 中的工作方式与在 C、C++、C#、Java、Javascript、Perl 和 PHP 中的工作方式相同。

            【讨论】:

              【解决方案6】:

              是的,它的工作原理相同,因为它具有以下基本语法

              condition ? true-expression : false-expression
              

              它只计算表达式,因此处理由条件指定的表达式的副作用。

              这是关于三元运算符的 Mozilla 文档的链接

              【讨论】:

                【解决方案7】:

                我不确定这是否有效:

                x > 100 ? y = x : z = x ;
                

                但这有效:

                y = x > 100 ? foo : bar ;
                

                【讨论】:

                • 测试过了。看起来它确实有效。 var z = 0; var y = 0; var x = 10; x > 100 ? y = x : z = x; 你得到x:10, y:0, z:10
                • 你的例子没有完成与原始代码相同的事情
                【解决方案8】:

                是的,三元运算符的工作方式与in Javascript 相同。您的示例结合了很多表达式,因此 precedence 可能是一个问题。您应该用括号括起来以确保优先级。

                【讨论】:

                  猜你喜欢
                  • 2019-07-07
                  • 1970-01-01
                  • 2019-09-23
                  • 2011-04-26
                  • 1970-01-01
                  • 2019-10-22
                  • 1970-01-01
                  • 2017-04-02
                  • 2020-02-25
                  相关资源
                  最近更新 更多