【问题标题】:Why does (true ? false ? '1' : '2' : '3') return 2?为什么 (true ? false ? '1' : '2' : '3') 返回 2?
【发布时间】:2018-01-31 09:43:13
【问题描述】:

下面的 JavaScript 返回2 的逻辑是什么?

true ? false ? '1' : '2' : '3'

【问题讨论】:

  • 你明白为什么true ? '1' : '2'会返回'1'吗?
  • 同true ? (false ? '1' : '2') : '3',因为三元运算符是向右关联的

标签: javascript ternary-operator


【解决方案1】:

查找运算符precedence。

由于三元运算符是右结合,上面的表达式被解析为:

true ? (false ? '1' : '2') : '3'

Right - to - left associativity 表示最右边的算子先执行。

在我们的例子中,最右边的三元运算符是 inner 运算符,因此首先执行。

【讨论】:

    【解决方案2】:

    这样想:

    1. 如果为真,则结果为假。 true ? false
    2. 如果为假,则结果为 1。false ? '1'
    3. 否则,结果为 2。: '2'
    4. 最后,我猜这是编译,因为它将语句分组如下:true ? (false ? '1' : '2') : '3'。所以如果你把第一个true 变成false,它应该返回3。

    希望对您有所帮助...如果您仍然不明白,请询问!

    【讨论】:

      【解决方案3】:

      只是在此处添加,这是表达式将如何使用 if-else 语句进行翻译

      // Translated:
      if (true) {
        if (false) {
          console.log(1)
        }
        else {
          console.log(2)
        } 
      } else {
        console.log(3)
      }
      

      【讨论】:

        【解决方案4】:

        ?: 是ternary operator。

        所以你的代码:

        var x = true ? false ? '1' : '2' : '3'
        

        是以下的简写形式:

        var x;
        
        if(true){
            if(false){
                x = '1';
            }else{
                x = '2'; // <= You will be here.
            }
        }else {
            x = 3;
        }
        

        【讨论】:

          猜你喜欢
          • 2019-01-09
          • 1970-01-01
          • 2023-01-16
          • 2019-12-07
          • 1970-01-01
          • 2014-07-04
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          相关资源
          最近更新 更多