JavaScript中&&和||天然支持短路求值,即结果确定时不再计算后续操作数;&&在左操作数falsy时返回左值且不执行右操作数,||在左操作数truthy时返回左值且不执行右操作数。

JavaScript 中的逻辑运算符 && 和 || 天然支持短路求值,这是它们的核心行为,不是额外功能,而是语言规范定义的执行机制。
什么是短路求值
短路求值指:当表达式的最终结果已经能被确定时,**不再计算后续操作数**。这既提升性能,也常被用于条件执行或默认值设置。
-
&&:左边为 falsy(如
false、0、""、null、undefined、NaN)时,直接返回左边值,右边不执行;只有左边为 truthy 时,才继续求值右边,并返回右边的结果。 - ||:左边为 truthy 时,直接返回左边值,右边不执行;只有左边为 falsy 时,才继续求值右边,并返回右边的结果。
用 && 实现条件执行和默认值
&& 常用于“安全访问”或“满足条件才执行”场景:
-
user && user.name && user.name.toUpperCase():逐层检查是否存在,任一环节为 falsy 就停止,避免报错。 -
config.debug && console.log('调试信息'):仅当config.debug为真时才打印,否则跳过console.log调用。 -
value && value.trim() || '默认值':先判断value是否存在且非空,再处理;但注意这里混合了 && 和 ||,需小心优先级(&& 优先级高于 ||)。
用 || 设置默认值
|| 是最常用的默认值写法(但注意它对所有 falsy 值都触发):
立即学习“Java免费学习笔记(深入)”;
-
const name = user.name || '匿名用户':如果user.name是undefined或'',就用右侧字符串。 -
function greet(msg) { msg = msg || 'Hello'; ... }:函数参数默认值(ES6 之前常用写法)。 - ⚠️ 注意:
0、false、''都是 falsy,所以0 || 10返回10——如果想保留0,应改用空值合并操作符??(只对null和undefined短路)。
短路求值的本质是表达式求值顺序
短路不是语法糖,而是 JavaScript 引擎按规范从左到右执行表达式时的自然行为:
- 引擎遇到
a && b,先求值a;若结果为 falsy,立即返回该结果,b根本不进入求值阶段(哪怕b是函数调用或复杂表达式)。 - 同理,
a || b中,若a为 truthy,b不会被求值。 - 你可以用带副作用的函数验证:
false && console.log('不会打印');true || console.log('也不会打印')。


















