【问题标题】:Order of Operations with ternary operator and OR operator三元运算符和 OR 运算符的运算顺序
【发布时间】:2020-06-15 21:39:04
【问题描述】:

为什么第一个例子的操作顺序是从右到左?

计算结果为 World

"Hello" || true ? "World" : ""

计算结果为 Hello

"Hello" || (true ? "World" : "")

【问题讨论】:

  • 运算符优先级 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 可以看到 OR 高于三元。不知道你期望什么作为答案,除了那是顺序。
  • @epascarello 我不介意条件和逻辑或运算符具有相同的优先级。我想知道为什么处于不同级别的原因
  • @MisterJojo 条件是 OR 操作。将它与逻辑 OR 置于同一级别似乎是合乎逻辑的。

标签: javascript conditional-operator boolean-expression


【解决方案1】:

可能你知道操作不是从左到右执行的,而是按照操作符的优先级执行的:想想吧:

1 + 2 * 3

你期待7 还是9?正如您所试验的那样,三元运算符的优先级较低。

"Hello" || true ? "World" : ""

等价于

("Hello" || true) ? "World" : ""

希望这会有所帮助。

【讨论】:

  • 这是有道理的。我希望它们具有相同的优先级。
【解决方案2】:

这是由于逻辑优先。

在第一个例子中,逻辑是用来判断是输出“World”还是“”。如果任一情况"Hello" || true 为真,则三元运算符将输出“World”。

在第二种情况下,|| 用作短路评估失败时的备用。也就是说,如果第一个值为真,则尝试输出第一个值。如果第一个值(在本例中为“Hello”)为 false,则计算下一个值(true ? "World" : "")。

在这两个示例中,逻辑对第一个值 (Hello) 的计算结果为真。不同的是,第一种情况是用作三元运算符作为使用的快捷方式

if ("Hello" || true) {
    return "World"
} else {
    return ""
}

【讨论】:

    【解决方案3】:

    希望对你有所帮助。

    "Hello" || true ? "World" : ""; 
    
    //is the same as:
    
    if("Hello" || true) {
    	console.log("World")
    } else {
    	console.log("");			
    };              // Outputs World
    
    
    console.log("Hello" || (true ? "World" : ""));	//Outputs Hello
    
    //sentence after OR is like:
    
    if(true) {
    	"World";
    } else {
    	"";
    }
    				
    //For example:
    
    console.log((true ? "World" : "") || "Hello");	//Outputs World
    
    console.log("Hello" || (true ? "World" : ""));	//Outputs Hello

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2010-11-29
      • 2023-03-07
      • 2015-07-08
      • 2018-09-26
      • 2015-09-29
      相关资源
      最近更新 更多