JavaScript运算符优先级决定谁先计算,结合性解决同级运算顺序;括号最高,一元运算次之,乘除高于加减,比较居中,逻辑靠后,赋值垫底;多数左结合,赋值、逻辑与或、三元为右结合。

JavaScript 中运算符的优先级与结合性,本质是解决“多个运算符挤在一个表达式里,谁先算、谁后算”的问题。它不是靠记忆整张表才能用好,而是掌握几条核心逻辑,就能应对绝大多数场景。
优先级:谁先动手
优先级决定运算顺序——数值越高的运算符越早参与计算。比如:
- 括号 ()永远最高,强制把里面的内容先算完;
-
一元运算符(如 !、++、-、+)紧随其后,比四则运算还早,所以
!true + 2是先取反再加,不是先加再取反; -
乘除取模(*, /, %)高于加减(+, -),符合数学直觉,
3 + 4 * 5得 23,不是 35; -
比较运算符(>, <=, === 等)优先级中等,总在算术之后、逻辑之前,
1 + 2 === 3 && 4 > 5先算左边的1 + 2 === 3(得 true),再算右边比较,最后逻辑与; -
逻辑与 && 和逻辑或 ||优先级低于比较,但高于三元
?:和赋值=,所以a && b === c ? x : y等价于(a && (b === c)) ? x : y。
结合性:同级时谁先来
当多个相同优先级的运算符连写,结合性就起作用。大多数是从左到右,少数从右到左:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
左结合(常见):比如
8 / 4 / 2按照从左到右算,即(8 / 4) / 2 = 1;a + b + c是(a + b) + c; -
右结合(关键例外):赋值运算符(
=,+=)、逻辑与&&、逻辑或||、三元?:都是右结合。例如:a = b = 5等价于a = (b = 5),所以b先被赋值,再把值传给a;true && false || true实际按(true && false) || true执行,因为&&优先级高于||,而两者各自内部都是右结合,但这里起决定作用的是优先级差。
怎么用才不踩坑
与其死记所有 20 级优先级,不如养成两个实用习惯:
立即学习“Java免费学习笔记(深入)”;
-
复杂逻辑一定加括号:比如
flag && a + b > 10 ? 'yes' : 'no',建议写成flag && (a + b > 10) ? 'yes' : 'no',明确意图,也避免未来维护者误读; -
混用类型运算时特别小心 +:它既是加法又是字符串拼接,
1 + 2 + '3'得'33'(先算数字加法得 3,再拼字符串),而1 + '2' + 3得'123'(从左到右,遇到字符串就全程转拼接); -
链式赋值和逻辑短路要意识到结合方向:写
const x = y = []时,其实是先执行y = [],再把数组引用赋给x,二者指向同一数组;a() || b() || c()会按顺序执行,一旦某个返回真值就停止,这是右结合性支撑的短路行为。
小结:抓主干,不硬背
记住“括号第一、一元靠前、算术分层(* / % 先于 + -)、比较居中、逻辑靠后、赋值垫底”,再配合“多数左、关键右”这个结合性口诀,日常开发已足够清晰。真正容易出错的,往往不是冷门位运算,而是 == 与 === 的隐式转换、+ 的双面性、以及 && || 在条件渲染中的实际求值路径——这些才是优先级规则真正该服务的地方。

















