You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

执行过程拆解:

  1. 变量初始化:a=0、b=0、c=0、d=0。
  2. 计算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(假)。
  3. 条件为假,进入else块,输出else block。
  4. 最后输出b的值,也就是0。

二、&&与||的优先级规则

在JavaScript中:

  • &&(逻辑与)的优先级高于||(逻辑或)。
  • 这意味着当表达式中同时出现&&和||时,会优先计算&&连接的部分,再将结果与||连接的部分计算。比如你的表达式a++ && b-- || c++,会被JavaScript解析为(a++ && b--) || c++,而非a++ && (b-- || c++)。

额外补充短路求值的核心规则:

  • &&:左侧为假时,直接返回左侧值,不执行右侧;左侧为真时,才执行右侧并返回右侧值。
  • ||:左侧为真时,直接返回左侧值,不执行右侧;左侧为假时,才执行右侧并返回右侧值。

内容的提问来源于stack exchange,提问作者Groot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:36:29