es6逻辑赋值运算符&&=、||=、??=分别基于truthy、falsy、null/undefined条件执行赋值:||=在左侧falsy时设默认值,??=仅在null/undefined时设空值默认,&&=仅在左侧truthy时更新值,三者均简化条件赋值逻辑。

ES6 及后续版本引入的逻辑赋值运算符(&&=、||=、??=)能直接根据左侧操作数的“真值性”或“空值性”决定是否执行赋值,避免冗长的 if 判断,让条件更新更简洁、可读性更强。
用 ||= 设置默认值(仅当左侧为 falsy 时赋值)
适用于初始化变量、补充缺失配置等场景。它在左侧为 false、0、''、null、undefined、NaN 时触发赋值。
-
❌ 传统写法:
if (!user.name) user.name = 'Anonymous'; -
✅ 简化写法:
user.name ||= 'Anonymous'; -
注意:如果
user.name是0或'',也会被覆盖——这不是 bug,而是按“falsy”语义设计的。
用 ??= 设置空值默认值(仅当左侧为 null 或 undefined 时赋值)
比 ||= 更精准,保留 0、false、'' 等有效值,适合处理真正“未定义”的字段。
-
❌ 传统写法:
if (user.age == null) user.age = 18; -
✅ 简化写法:
user.age ??= 18; - 常见用途:API 响应字段缺失补缺、函数参数兜底、状态初始化。
用 &&= 在条件成立时才更新(左侧为 truthy 才赋值)
较少见但有明确语义:仅当原值“有效”时,才用新值覆盖。常用于权限检查、开关控制或链式状态更新。
-
示例:
user.isActive &&= user.hasPaid;表示“若用户原本激活,且已付费,则保持激活;否则设为 false”。 -
等价于:
if (user.isActive) user.isActive = user.hasPaid; - 注意:右侧表达式总会执行,但只在左侧为 truthy 时结果才会赋给左侧。
这三个运算符不改变原有逻辑,只是把“判断 + 赋值”的两步合并为原子操作,代码更紧凑,意图更清晰。选用哪个取决于你关心的是 falsy、null/undefined,还是 truthy 条件。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











