JavaScript运算符优先级决定多运算符共存时的执行顺序,核心是“从高到低”分层处理,括号最高,赋值最低;结合性规定同级运算方向,多数左结合,赋值与逻辑运算右结合;实际开发应主动加括号、慎用隐式转换、以可读性为先。

JavaScript 中的运算符优先级决定了多个运算符共存时谁先执行。它不是靠记忆背下来的,而是靠理解规则 + 合理使用括号来保障逻辑清晰和结果准确。
优先级的核心是“从高到低”分层处理
比如 3 + 4 * 2 不会从左到右算成 14,而是先算 4 * 2(乘法优先级高于加法),再加 3,得 11。这种层级关系类似数学中的“先乘除、后加减”,但 JavaScript 更细,共约 20 级。关键层级包括:
- 括号
()优先级最高,可强制改变默认顺序 - 一元运算符(如
!、++、-)紧随其后,比二元运算符更早生效 - 乘性运算符(
*、/、%)高于加性运算符(+、-) - 比较运算符(
>、===等)又高于逻辑与&&,而&&高于逻辑或|| - 赋值运算符(如
=、+=)优先级最低,总是在表达式最后执行
结合性影响同级运算的执行方向
当多个相同优先级的运算符连用时,结合性决定计算顺序:
- 大多数运算符从左向右结合:如
8 / 4 / 2等价于(8 / 4) / 2 → 1 - 赋值类(
=、+=)、逻辑运算符(&&、||)和三元运算符(? :)是从右向左结合:如a = b = 5先执行b = 5,再把 b 的值赋给 a
实际开发中怎么用才不踩坑
优先级容易出错的地方往往不在“记不住”,而在“想当然”。建议:
- 涉及混合类型时主动加括号,例如
if (a && b || c)明确写成if ((a && b) || c),避免歧义 - 慎用隐式转换相关的比较,比如
0 == false是 true,但0 === false是 false;优先用===可减少因类型转换带来的优先级干扰 - 链式赋值或逻辑运算中,关注返回值本身:如
const name = user?.name ?? "匿名",??优先级低于=,所以无需额外括号 - 遇到不确定的组合(比如
!a & b),查 MDN 运算符优先级表或直接加括号——代码可读性永远比炫技重要
快速验证优先级的小技巧
不用死记硬背整张表,可以用控制台快速试探:
- 输入
console.log(1 + 2 * 3)看输出是 7 还是 9 - 试
console.log(false || true && false),结果是 false,说明&&比||先执行 - 试
let x; console.log(x = 1, x += 2),观察赋值与复合赋值的触发时机
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











