JavaScript运算符优先级应分层理解而非死记,核心四层为:括号与一元运算符最高,乘性高于加性,比较晚于算术,逻辑与高于逻辑或;括号用于明确意图而非仅防错,尤其在混合逻辑、隐式转换、三元嵌套等场景必须使用。

记住 JavaScript 运算符优先级不靠死背整张表,而靠分层理解和括号驱动。真正影响日常编码的只有几层核心顺序,其余靠括号明确意图即可。
抓主干:四层关键优先级
把二十多级压缩成四类,覆盖 90% 场景:
-
括号和一元运算符最高:
()、!、++、--、-(负号)、typeof总是先执行。比如!a + b等价于(!a) + b,不是!(a + b) -
乘性高于加性:
*、/、%比+、-早算。所以3 + 4 * 5得 23,不是 35 -
比较晚于算术:
==、>、<=等总在加减乘除之后运行。a + b > c先算加法再比大小 -
逻辑与高于逻辑或:
&&比||优先级高。flag1 || flag2 && flag3实际是flag1 || (flag2 && flag3)
括号不是保险丝,是说明书
加括号不是为了“防止出错”,而是告诉别人(包括未来的你):“这里我有意这样算”。尤其在以下情况必须加:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 混合逻辑时:
flagA && flagB || flagC && flagD→ 明确写成(flagA && flagB) || (flagC && flagD) - 涉及隐式转换:
"" + a + b == c容易误读,拆成(("" + a) + b) == c或改用模板字面量更清晰 - 三元嵌套:
a ? b : c ? d : e默认右结合,想表达(a ? b : c) ? d : e就必须加括号 - 箭头函数带解构:
({x}) => x * 2的小括号不能省,否则会被当成代码块
几个容易踩坑的组合
有些写法看着顺眼,但优先级反直觉:
立即学习“Java免费学习笔记(深入)”;
-
!a == b是(!a) == b,不是!(a == b);后者必须显式加括号 -
a & b == c先算b == c再按位与,因为==优先级高于&;真要对比结果得写(a & b) == c -
typeof a + b结果是字符串拼接(如"number" + 5),想先算a + b再判断类型,就得typeof (a + b)
日常怎么练最有效
不用背数字编号,用“读出来”代替“想优先级”:
- 看到
+和*同行,直接念“先乘除后加减” - 看到
&&和||,念“and 比 or 绑得紧” - 遇到不确定,就加括号——这不是妥协,是主动沟通
- 写完一行逻辑,快速默读一遍执行路径,卡壳处就是该加括号的地方

















