??= 是空值合并赋值运算符,仅当左侧为 null 或 undefined 时才将右侧值赋给左侧,不触发对 0、false、'' 等 falsy 值的赋值,精准实现“真正为空时才赋值”。

JavaScript 中逻辑赋值运算符(如 ??=、&&=、||=)可以实现“仅在满足特定条件时才赋值”,但要注意:**只有空值合并赋值运算符 ??= 是专门用于“变量为空(null 或 undefined)时才赋值”的场景**。
✅ 使用 ??= 实现“仅当变量为 null 或 undefined 时赋值”
??= 是空值合并赋值运算符,它只在左侧操作数为 null 或 undefined 时,才将右侧的值赋给左侧变量。它不会把 0、false、''(空字符串)等“falsy 值”当作空来处理——这正是你想要的“真正为空时才赋值”行为。
let x; x ??= 'default'; // x → 'default'(x 是 undefined)</li> <li><code>let y = null; y ??= 'default'; // y → 'default'(y 是 null)</li> <li><code>let z = 0; z ??= 'default'; // z 仍是 0(0 不是 null/undefined,不赋值)</li> <li><code>let w = ''; w ??= 'default'; // w 仍是 ''(空字符串也不触发赋值)</li> </ul> <H3>❌ 避免误用 <code>||=
||=是逻辑 OR 赋值,它在左侧为 任何 falsy 值(false、0、''、null、undefined、NaN)时都会执行赋值。这容易导致意外覆盖合法值:let count = 0; count ||= 10; // count 变成 10 —— 但 0 是有效数值,不该被覆盖</li> <li><code>let isActive = false; isActive ||= true; // isActive 变成 true —— 但 false 是明确的业务状态</li> </ul> <H3>? 实际应用建议</H3> <p>适合用 <code>??=
的典型场景:立即学习“Java免费学习笔记(深入)”;
- 初始化可选配置项:
config.timeout ??= 5000; - 补全未传入的函数参数:
function loadData(options) { options.url ??= '/api/data'; ... } - 对象属性兜底:
user.profile ??= {};
⚠️ 注意兼容性
??=是 ES2021(ES12)特性,现代浏览器和 Node.js 16+ 均支持。若需兼容旧环境(如 IE 或 Node.jsif (x === null || x === undefined) x = 'default';或x = x ?? 'default';- 初始化可选配置项:


















