JavaScript逻辑赋值运算符&&=、||=、??=分别实现条件更新、falsy默认值和null/undefined默认值;||=覆盖所有falsy值,??=仅在null/undefined时赋值,&&=仅当左侧truthy时赋值,需注意适用场景与可读性。

JavaScript 中的逻辑赋值运算符(&&=、||=、??=)能让你用更少代码实现“仅在满足特定逻辑条件时才赋值”,避免冗长的 if 判断或三元表达式。
用 ||= 设置默认值(当左侧为 falsy 时赋值)
它等价于“如果左边是 false、0、''、null、undefined 或 NaN,就用右边的值覆盖”。适合初始化未定义或空值的变量。
-
常见写法:
user.name ||= '匿名用户'; -
等价于:
if (!user.name) user.name = '匿名用户'; -
注意:如果
user.name是0或false,也会被覆盖——这不总是你想要的,比如计数器初始为0时。
用 ??= 设置空值默认值(只在 null/undefined 时赋值)
这是更安全的默认值设置方式,只在左侧为 null 或 undefined 时才赋值,保留 0、false、'' 等有效 falsy 值。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
推荐用于配置或可选字段:
config.timeout ??= 5000; -
等价于:
if (config.timeout === null || config.timeout === undefined) config.timeout = 5000; -
举例:
let count = 0; count ??= 10;→count仍为0,不会被改写。
用 &&= 条件性更新(仅当左侧为 truthy 时才赋新值)
它表示“如果左边是 truthy,就把右边的值赋给它”。常用于需要前置校验的更新操作,比如只对已存在的对象属性做进一步处理。
立即学习“Java免费学习笔记(深入)”;
-
例子:
user.profile &&= { ...user.profile, lastActive: Date.now() }; -
等价于:
if (user.profile) user.profile = { ...user.profile, lastActive: Date.now() }; -
适用场景:避免对
null或undefined属性展开或修改,减少运行时错误。
注意事项和最佳实践
- 别混淆
||=和??=:前者对所有 falsy 值生效,后者只认null/undefined。 - 赋值右侧支持表达式:如
opts.retryCount ??= Math.max(1, defaultRetry);,但注意表达式会在每次执行时求值(不是惰性)。 - 不适用于声明时赋值:不能写
let x ||= 1(语法错误),必须先声明变量再使用逻辑赋值。 - 可读性优先:如果逻辑稍复杂,比如带副作用或嵌套判断,还是用
if更清晰,别为了简写牺牲可维护性。

















