JavaScript逻辑赋值运算符(??=、||=、&&=)简化条件赋值:??=仅在null/undefined时设默认值,||=对所有假值赋值,&&=仅当左操作数为真时更新,提升安全性与可读性。

JavaScript 的逻辑赋值运算符(&&=、||=、??=)能让条件赋值更简洁安全,避免冗长的 if 判断或重复取值,特别适合处理默认值、状态更新和短路逻辑。
用 ??= 设置安全的默认值
当变量为 null 或 undefined 时才赋值,其他“假值”(如 0、false、'')保持原样——这是它和 ||= 的关键区别。
✅ 推荐场景:初始化配置项、缓存字段、可选参数兜底
-
user.settings ??= { theme: 'light', notifications: true };→ 只有settings确实未定义时才设默认对象 -
config.timeout ??= 5000;→ 即使config.timeout是0,也不会被覆盖
用 ||= 赋值“真值默认值”
只要左侧操作数是假值(false、0、''、null、undefined、NaN),就执行赋值。适合不关心具体假值类型、只想要“有值就行”的情况。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
⚠️ 注意:会覆盖 0 和空字符串,慎用于数字计数器或用户输入字段
-
count ||= 1;→count为0或undefined都会变成1 -
name ||= 'Anonymous';→ 名字为空串也触发赋值
用 &&= 实现“仅当已有真值时才更新”
只有左边是真值,才把右边结果赋给左边。常用于状态联动、权限检查后的操作,或避免对空对象调用方法。
-
currentUser &&= currentUser.isActive ? currentUser : null;→ 先确保currentUser存在,再检查是否激活 -
cache.data &&= transform(cache.data);→ 仅当data存在且为真值时才转换并赋回
对比传统写法,突出优势
逻辑赋值不是语法糖,而是减少重复读取、提升可读性、规避竞态风险的实际优化:
- 传统:
if (obj.value === undefined) obj.value = defaultValue;→ 多次访问obj.value - 优化:
obj.value ??= defaultValue;→ 一次求值,原子操作,无副作用风险 - 传统:
if (arr && arr.length > 0) result = arr[0];→ 显式判断 + 赋值两步 - 优化:
result &&= arr?.[0];(配合可选链)→ 更紧凑,语义明确

















