你能在JavaScript中映射以下表达式的执行顺序吗?

Can you map the execution order of following expression in JavaScript?

还请说明为什么该语句会以这种方式执行。

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

感谢您的宝贵时间!

代码如下:

let x = 1;

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

如果你看一下operators precedence

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

所以表达式执行如下:

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

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

就像:

fun1() || func2()

如果fun1()的return值为真,则func2()根本不会执行。

没有必要使用||的右边,因为左边已经是真值了,所以无论右边是什么,都改变不了结果(true || truetrue || false 将计算为 true)。因此,除了 x > 0 之外不需要计算其他任何东西以获得明确的结果,alert() && "hii" 被跳过并且 return 值为 truex > 0 的结果). (这称为短路或条件评估。)参见 docs

如果你试过这个:

let x = 1;

x > 0 || alert() && false

输出将是 true,这是因为 &&|| 运算符之前执行,"hii" 被评估为 true 所以这让您感到困惑有问题,因为 ( true || alert() && true 会给出与 true || (alert() && true).

相同的结果