【问题标题】:Can you map the execution order of following expression in JavaScript?你能在 JavaScript 中映射以下表达式的执行顺序吗?
【发布时间】:2021-12-14 08:34:30
【问题描述】:

还请说明为什么这条语句会这样执行。

我很困惑,因为< 运算符在下面的语句中具有更高的优先级。执行x > 0 后,应该执行&& 运算符,但它没有执行。所以我对执行顺序是什么以及为什么以这种方式执行感到困惑。

感谢您的宝贵时间!

代码如下:

let x = 1;

x > 0 || alert() && "hii" 

【问题讨论】:

标签: javascript logical-operators


【解决方案1】:

如果你看看operators precedence

  • > 具有最高优先级
  • && 是下一个优先级
  • || 是下一个优先级

所以表达式执行如下:

(x > 0) || (alert() && "hii")

在这种情况下,x > 0true。因为 JavaScript || short-circuits 如果第一个操作数为真,则不会计算第二个操作数。

就像:

fun1() || func2()

如果fun1()的返回值为真,那么func2()根本不会被执行。

【讨论】:

  • 但是根据你的说法,在
  • 正如我评论中的短路链接中所解释的那样。如果 && 的优先级高于 || than 意味着操作数的分组将如下所述: (x > 0) || (alert() && "hii") 但执行会从左到右,所以 (x>0) 为真,那么我们有 ||并且由于短路,这就是执行的结束。
  • 知道了!谢谢?。嗯,有没有什么工具可以判断js表达式的执行顺序,作为一个初学者,肯定会遇到这样比较混乱的表达式。
  • 最好的方法是尝试这些东西。制作各种复杂的场景并调试事物(使用console.log()或调试器;),然后您将实现事物。此外,您将在未来看到,您将尝试避免所有复杂的条件,仅仅因为这些事情(和可读性)并且您将编写它们更简单(不是所有内容都在一行中,而是将其拆分等)跨度>
【解决方案2】:

|| 的右边没必要用,因为左边已经是真的了,所以不管右边是什么,反正也改变不了结果(true || true 和 @ 987654324@ 将评估为true)。因此,除了x > 0 之外,不需要计算任何东西以获得明确的结果,alert() && "hii" 被跳过,返回值为truex > 0 的结果)。 (这称为短路或条件评估。)请参阅docs

【讨论】:

    【解决方案3】:

    如果你尝试过:

    let x = 1;
    
    x > 0 || alert() && false
    

    输出将是true,这是因为&&|| 运算符之前执行,"hii" 被评估为真,所以这让您感到困惑,认为有问题,如( true || alert() && true将给出与true || (alert() && true) 相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2016-12-19
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2011-09-28
      • 2018-02-07
      相关资源
      最近更新 更多