你能在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 > 0
是 true
。因为 JavaScript ||
short-circuits 如果第一个操作数为真,则不会计算第二个操作数。
就像:
fun1() || func2()
如果fun1()
的return值为真,则func2()
根本不会执行。
没有必要使用||
的右边,因为左边已经是真值了,所以无论右边是什么,都改变不了结果(true || true
和 true || false
将计算为 true
)。因此,除了 x > 0
之外不需要计算其他任何东西以获得明确的结果,alert() && "hii"
被跳过并且 return 值为 true
(x > 0
的结果). (这称为短路或条件评估。)参见 docs。
如果你试过这个:
let x = 1;
x > 0 || alert() && false
输出将是 true
,这是因为 &&
在 ||
运算符之前执行,"hii"
被评估为 true 所以这让您感到困惑有问题,因为 ( true || alert() && true
会给出与 true || (alert() && true)
.
相同的结果
还请说明为什么该语句会以这种方式执行。
我很困惑,因为 <
运算符在下面的语句中具有更高的优先级。在执行 x > 0
之后,应该执行 &&
运算符,但它没有执行。所以我对执行顺序是什么以及为什么以这种方式执行感到困惑。
感谢您的宝贵时间!
代码如下:
let x = 1;
x > 0 || alert() && "hii"
如果你看一下operators precedence。
>
具有最高优先级&&
是下一个||
是下一个
所以表达式执行如下:
(x > 0) || (alert() && "hii")
在这种情况下 x > 0
是 true
。因为 JavaScript ||
short-circuits 如果第一个操作数为真,则不会计算第二个操作数。
就像:
fun1() || func2()
如果fun1()
的return值为真,则func2()
根本不会执行。
没有必要使用||
的右边,因为左边已经是真值了,所以无论右边是什么,都改变不了结果(true || true
和 true || false
将计算为 true
)。因此,除了 x > 0
之外不需要计算其他任何东西以获得明确的结果,alert() && "hii"
被跳过并且 return 值为 true
(x > 0
的结果). (这称为短路或条件评估。)参见 docs。
如果你试过这个:
let x = 1;
x > 0 || alert() && false
输出将是 true
,这是因为 &&
在 ||
运算符之前执行,"hii"
被评估为 true 所以这让您感到困惑有问题,因为 ( true || alert() && true
会给出与 true || (alert() && true)
.