JavaScript中&&与||优先级及代码执行结果疑问解析
代码执行逻辑与运算符优先级解析
一、代码逐行执行分析
先看你给出的代码:
function Test() { var a = 0; var b = 0; var c = 0; var d = 0; if (a++ && b-- || c++) { console.log("if block") } else { console.log("else block") } console.log(b); } Test();
执行过程拆解:
- 变量初始化:
a=0、b=0、c=0、d=0。 - 计算
if的条件表达式a++ && b-- || c++:- 第一步:处理
a++ && b--a++是后置自增运算符,先返回变量当前值0,随后a才会变为1。- 逻辑与
&&运算中,若左侧表达式结果为假值(这里0属于假值),JavaScript会触发短路求值——直接返回左侧结果,不会执行右侧的b--。因此b的值保持0不变,a++ && b--的结果为0(假)。
- 第二步:处理
(a++ && b--) || c++- 上一步得到的结果是
0(假),接下来执行逻辑或||运算。c++同样是后置自增,先返回当前值0,随后c变为1。 - 逻辑或
||中,两侧都是假值(0和0),所以整个条件表达式的结果为0(假)。
- 上一步得到的结果是
- 第一步:处理
- 条件为假,进入
else块,输出else block。 - 最后输出
b的值,也就是0。
二、&&与||的优先级规则
在JavaScript中:
&&(逻辑与)的优先级高于||(逻辑或)。- 这意味着当表达式中同时出现
&&和||时,会优先计算&&连接的部分,再将结果与||连接的部分计算。比如你的表达式a++ && b-- || c++,会被JavaScript解析为(a++ && b--) || c++,而非a++ && (b-- || c++)。
额外补充短路求值的核心规则:
&&:左侧为假时,直接返回左侧值,不执行右侧;左侧为真时,才执行右侧并返回右侧值。||:左侧为真时,直接返回左侧值,不执行右侧;左侧为假时,才执行右侧并返回右侧值。
内容的提问来源于stack exchange,提问作者Groot
相关产品推荐
相关产品推荐

