javascript逻辑赋值运算符??=、||=、&&=分别用于空值默认赋值、假值默认赋值和真值条件赋值:??=仅在null/undefined时赋值,最安全;||=在任意假值时赋值,需慎用;&&=仅在左侧为真值时赋值,适用于条件更新。

JavaScript 中的逻辑赋值运算符(&&=、||=、??=)能直接在不重复变量名的前提下,根据操作数的“真值性”或“空值性”决定是否重新赋值,大幅简化空值判断和默认值设置逻辑。
用 ??= 设置空值默认值(推荐用于 null/undefined)
??= 只有当左侧操作数为 null 或 undefined 时才执行赋值,不会误触 0、false、'' 等假值 —— 这正是它比 ||= 更安全的核心原因。
常见写法对比:
- 传统写法:
if (user.name == null) user.name = '匿名'; - ES2021 简化:
user.name ??= '匿名';
适用于初始化配置项、表单字段、API 响应中可能缺失的字段等场景。
用 ||= 设置“假值”默认值(慎用,注意语义)
||= 在左侧为任意假值(false、0、''、null、undefined、NaN)时都会触发赋值。仅当你**确实希望覆盖所有假值**时才使用。
例如:
-
config.timeout ||= 5000;→ 若 timeout 是0,也会被改成5000(可能不符合预期) - 若本意是“只补缺,不改零”,应改用
??=
用 &&= 实现条件性更新(较少见但有用)
&&= 表示:仅当左侧为真值时,才将右侧值赋给左侧。相当于 lhs = lhs && rhs 的简写。
典型用途:
- 链式状态更新(如权限标记):
user.canEdit &&= user.role === 'admin'; - 保留原值或清空(当 rhs 为 falsy):
cache.data &&= fetchData();→ 只有 cache.data 为真时才尝试更新
注意:它不是“空值判断”,而是“真值守门”,别和 ??= 混淆。
实际组合技巧:嵌套对象安全初始化
配合可选链(?.)和逻辑赋值,可安全初始化深层属性:
user.profile?.settings ??= {};user.profile?.settings.theme ??= 'light';
这比手写 if (!user.profile) user.profile = {}; 等层层判断简洁得多,且无副作用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











