逻辑赋值运算符&&=、||=、??=分别实现条件更新、falsy默认值、nullish默认值;||=对0/''/false也赋值,??=仅对null/undefined赋值,&&=要求右侧返回值;需es2021支持且不能用于声明。

JavaScript 中的逻辑赋值运算符(&&=、||=、??=)能帮你用更少代码实现“有值才赋”或“无值才设默认”的逻辑,避免冗长的 if 判断或三元表达式。
用 ||= 设置默认值(仅当左侧为 falsy 时赋值)
适合给变量设置初始值,比如空字符串、0、null、undefined 都会触发赋值。
替代写法:
-
旧写法:
if (!user.name) user.name = '匿名用户'; -
新写法:
user.name ||= '匿名用户';
注意:||= 基于“falsy 判断”,所以 0、''、false 也会被覆盖。如果想保留 0 或空字符串,就别用它。
用 ??= 设置空值默认(仅当左侧为 null 或 undefined 时赋值)
这是更安全的默认值设定方式,只在真正“缺失”时生效。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
旧写法:
user.age = user.age !== undefined && user.age !== null ? user.age : 18; -
新写法:
user.age ??= 18;
✅ 0、false、'' 都不会被替换,只有 null 和 undefined 才触发赋值。
用 &&= 条件性更新(仅当左侧为 truthy 时才执行赋值)
常用于“有数据才处理并更新”的场景,比如累加、拼接或调用方法。
-
旧写法:
if (cart.items) cart.items.push(newItem); -
新写法:
cart.items &&= [...cart.items, newItem];
⚠️ 注意:&&= 是“先判断左边是否为真,再把右边结果赋给左边”,不是“如果真就执行右边”。所以上例中右边必须返回新数组,否则 cart.items 会被设为 undefined(如果右边没返回值)。更稳妥写法是:cart.items && (cart.items = [...cart.items, newItem]);
使用前提和兼容性提醒
这三个运算符是 ES2021(ES12)新增特性,现代浏览器和 Node.js 15+ 原生支持。若需兼容老环境(如 IE 或旧版 Node),需用 Babel 转译或回退到传统写法。
它们不能用于声明语句(如 let x ||= 1 会报错),只能用于已声明变量的赋值操作。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










