逻辑与(&&)优先级高于逻辑或(||),且高于!的优先级;表达式按! > && > ||顺序解析,如!a || b && c等价于(!a) || (b && c),短路行为不影响优先级分组。

逻辑与(&&)的优先级高于逻辑或(||),所以组合使用时,&& 总是先计算,再算 ||。
优先级顺序明确:! > && > ||
JavaScript 中逻辑运算符的完整优先级从高到低是:
- !(逻辑非):单目运算符,最高优先级
- &&(逻辑与):中等优先级,高于 ||
- ||(逻辑或):最低优先级
例如:!a || b && c 等价于 (!a) || (b && c),不是 (!a || b) && c。
实际表达式按优先级自动分组
不加括号时,JS 引擎会按优先级隐式加括号。常见例子:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
false || true && false→ 先算true && false得false,再算false || false→ 结果false -
0 || 1 && null→1 && null是null(因为null是假值),再0 || null→ 返回null -
!true && false || true→!true是false,接着false && false是false,最后false || true是true
用括号显式控制执行顺序更安全
即使知道优先级,也建议对复杂逻辑加括号,避免歧义和可读性问题:
- 写成
(a || b) && c表示“a 或 b 成立,且 c 也成立” - 写成
a || (b && c)表示“a 成立,或者 b 和 c 同时成立” - 不加括号的
a || b && c虽然语法合法,但容易误读,尤其对团队协作或后期维护不利
注意短路行为不影响优先级判断
&& 和 || 的短路特性(比如 false && expr 不执行 expr)是在运算执行阶段起作用的,和“谁先被选中计算”无关。优先级决定的是表达式结构怎么拆解,短路决定的是某部分是否跳过求值。
例如:console.log(1) || console.log(2) && console.log(3),先按优先级理解为 console.log(1) || (console.log(2) && console.log(3));由于左侧 console.log(1) 返回 undefined(假值),才会继续算右边——但右边是整体作为一个子表达式参与 || 运算的。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










