JS运算符优先级决定计算顺序,高优先级先绑定操作数;结合性解决同级运算方向,左结合如+ -,右结合如= && ||;易错点包括字符串拼接、递增运算及逻辑组合,推荐用括号显式分组确保逻辑清晰。

JS 中运算符优先级和结合性直接决定表达式怎么拆解、从哪开始算,稍不注意就会得到意料之外的结果。
优先级决定谁先算
优先级高的运算符会先跟操作数“绑定”,相当于自动加了括号。比如:
-
3 + 5 * 2→ 先算5 * 2,再加3,结果是 13 -
!true && false→!优先级高于&&,等价于(!true) && false,结果是 false -
a = b + c * d→*和+都比=优先级高,所以先算右边整个表达式,再赋值
结合性解决同级运算的顺序
当多个相同优先级的运算符连用时,结合性决定计算方向:
- 加减、乘除、比较运算符(如
+ - * / ==)都是左结合:10 - 3 - 2等价于(10 - 3) - 2,结果是 5 - 赋值、逻辑与/或、三元运算符(
= && || ?:)是右结合:a = b = 5等价于a = (b = 5),所以a和b都变成 5 -
true && false || true中,&&优先级高于||,所以先算true && false得false,再算false || true得 true
常见易错点
有些组合看着直观,实际执行顺序容易误判:
-
"" + 1 + 2:加法左结合,"" + 1得"1",再"1" + 2得 "12"(不是数值 3) -
++i + i++:前置递增和后置递增优先级相同但结合性不影响(一元运算符只作用于单个操作数),但执行时机不同,结果依赖初始值 -
a && b || c不等于a && (b || c),而是(a && b) || c,因为&&优先级更高
最稳妥的做法
别靠死记硬背全部优先级表,日常开发中用括号显式分组更清晰、更安全:
- 写
(a + b) * c而不是a + b * c(即使你知道乘法优先) - 写
a && (b || c)如果本意是这个逻辑 - 复杂条件或混合类型操作(比如字符串拼接+数值计算)一定加括号,避免隐式转换干扰


















