JavaScript中真实可用的逻辑赋值运算符只有||=和??=:||=在左侧falsy时赋值,??=仅在左侧为null或undefined时赋值;&&=不存在,使用会报语法错误。

JavaScript 中并没有 &&= 和 ||= 这两个运算符——它们是无效语法,会直接报错(Unexpected token '&' 或类似)。你可能混淆了 空值合并赋值运算符 ??= 与已有的 逻辑或赋值 ||=(ES2021 正式支持),但 &&= 在标准中并不存在,也未被提案纳入。
哪些逻辑赋值运算符是真实可用的?
目前 JavaScript 正式支持的逻辑赋值运算符只有两个:
-
||=:仅当左侧操作数为 falsy(如null、undefined、0、false、''、NaN)时,才将右侧值赋给左侧; -
??=:仅当左侧操作数为 nullish(即null或undefined)时,才赋值;
&&= 不是语言特性,不可用。试图写 a &&= b 会抛出语法错误。
用 ||= 替代冗余的默认赋值判断
常见于初始化配置、缓存、状态字段等场景,避免重复写 if (!a) a = b 或三元表达式。
重构前:
if (!user.role) {
user.role = 'guest';
}
if (!config.timeout) {
config.timeout = 5000;
}
重构后(更简洁、语义清晰):
user.role ||= 'guest'; config.timeout ||= 5000;
⚠️ 注意:||= 对 0、false、'' 等 falsy 值也会触发赋值,若业务允许这些值作为有效状态,则不适合用 ||=。
用 ??= 安全设置 null/undefined 默认值
当你要保留 0、false、'' 等“有意义的 falsy 值”时,??= 是更精准的选择。
例如用户可能显式设置 settings.notifications = false,你不应覆盖它:
// ❌ 错误:会把 false 覆盖成 true settings.notifications ||= true; // ✅ 正确:只在 undefined/null 时设默认值 settings.notifications ??= true;
典型适用场景:API 响应字段缺失补默认、React props 初始化、数据库读取空值兜底。
不能替代 &&= 的需求?用函数封装或条件表达式
如果真需要「仅当左侧为真时才赋值」(即模拟 a && (a = b)),可改写为:
- 一行条件赋值:
if (a) a = b;(清晰直接,无需强行压缩) - 短路表达式(不推荐用于赋值逻辑,易读性差):
a && (a = b); - 封装为工具函数:
assignIfTruthy(obj, key, value)
强行追求“极简符号”而牺牲可读性或引入错误语法,反而增加维护成本。
真正提升代码质量的关键,不是找不存在的运算符,而是根据数据语义选对 ||= 或 ??=,并在 falsy 与 nullish 之间做清醒判断。










