||= 是逻辑或赋值运算符,仅当左侧为假值(false、0、""、null、undefined、nan)时才将右侧值赋给左侧,等价于 if (!a) a = b,用于简洁设置默认值。

JavaScript 中的逻辑赋值运算符(||=)能直接在“逻辑或”语义下简化赋值,避免冗长的条件判断。
什么是 ||=?
它等价于“只有当左侧操作数为假值(falsy)时,才将右侧值赋给左侧变量”。不需要显式写 if (!a) a = b 或三元表达式。
例如:
let name; name ||= 'anonymous'; // name 是 undefined(falsy),所以被赋值为 'anonymous' console.log(name); // 'anonymous' name ||= 'guest'; // name 已是 'anonymous'(truthy),不重新赋值 console.log(name); // 'anonymous'
哪些值会被触发赋值?
||= 的左侧只要为 falsy(false、0、-0、0n、""、null、undefined、NaN),就会执行赋值。
常见适用场景包括:
- 初始化未定义的变量(如函数参数、对象属性)
- 设置默认配置项(尤其处理
null或空字符串) - 避免覆盖已有有效值(比如用户已传入
0或false,但你只想补缺省值)——注意:这里要小心,因为0和false也会触发赋值
和传统写法对比
以前常这样写:
// 冗余写法
if (config.timeout === undefined || config.timeout === null) {
config.timeout = 5000;
}
// 或更简但不够直观
config.timeout = config.timeout || 5000; // ❌ 问题:0 或 false 会被误覆盖
// ✅ 推荐用 ||=(ES2021+)
config.timeout ||= 5000;
注意:a ||= b 不等于 a = a || b 在某些边界情况(如 a 是 getter/setter 或 Proxy),但对普通变量完全等效且更语义清晰。
实用小技巧
- 可链式使用:多个变量依次设默认值,如
opts.host ||= 'localhost'; opts.port ||= 3000; - 配合解构安全取值:
const { url } = obj; url ||= '/';(注意解构后变量不可再用||=赋给原对象属性,需单独操作) - 与空值合并
??=区分清楚:??=只在null或undefined时赋值,||=对所有 falsy 值都生效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











