Javascript 为什么(true?false?';1';:';2';:';3';)返回2?

Javascript 为什么(true?false?';1';:';2';:';3';)返回2?,javascript,ternary-operator,Javascript,Ternary Operator,从以下JavaScript返回2的逻辑是什么 true ? false ? '1' : '2' : '3' 查一下接线员 由于三元运算符是右关联的,因此将上述表达式解析为: true ? (false ? '1' : '2') : '3' 表示首先执行最右边的运算符 在我们的例子中,最右边的三元运算符是内部的,因此首先执行。这样想: 如果为true,则结果为false正确?错误 如果为false,则结果为1错误?“1' 否则,结果是2:“2” 最后,我猜这是编译的,因为它将语句分组如下:tr

从以下JavaScript返回
2
的逻辑是什么

true ? false ? '1' : '2' : '3'
查一下接线员

由于三元运算符是右关联的,因此将上述表达式解析为:

true ? (false ? '1' : '2') : '3'
表示首先执行最右边的运算符

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

这样想:

  • 如果为true,则结果为false<代码>正确?错误
  • 如果为false,则结果为1<代码>错误?“1'
  • 否则,结果是2<代码>:“2”
  • 最后,我猜这是编译的,因为它将语句分组如下:
    true?(假?'1':'2'):'3'
    。因此,如果将第一个
    true
    转换为
    false
    ,它应该返回3

  • 希望这有助于。。。如果你仍然不明白,请问

    仅在此添加,这是表达式使用
    if-else
    语句进行翻译的方式

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

    因此,您的代码:

    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;
    }
    
    varx;
    如果(真){
    if(false){
    x='1';
    }否则{
    
    x='2';//您知道为什么
    true?'1':'2'
    会返回
    '1'
    ?与
    true?(false?'1':'2'):'3'
    ,因为三元运算符关联到右侧