javascript逻辑赋值运算符&&=、||=、??=分别实现条件更新、假值默认赋值和空值默认赋值:||=在左侧为falsy时赋值,??=仅在null/undefined时赋值,&&=在左侧为truthy时执行赋值。

JavaScript 中的逻辑赋值运算符(&&=、||=、??=)能根据左侧操作数的“真值性”或“空值性”,决定是否执行右侧表达式赋值,从而避免冗长的条件判断,让赋值更简洁安全。
用 ||= 设置默认值(仅当左侧为假值时赋值)
它等价于“如果左边是 falsy(如 null、undefined、0、''、false、NaN),就用右边的值赋值”。适合初始化变量或补充缺失配置。
-
let count = 0; count ||= 10;→count仍是0(因为0是 falsy,所以赋值生效,结果为10) -
let name; name ||= 'Anonymous';→name变为'Anonymous' - 注意:
||=对0、''等合法但 falsy 的值也会覆盖,不适合区分“未定义”和“明确为 0/空字符串”的场景
用 ??= 设置空值默认值(仅当左侧为 null 或 undefined 时赋值)
这是更精准的默认值设置方式,跳过 0、false、'' 等有效值,只处理真正“缺失”的情况。
-
let timeout; timeout ??= 5000;→timeout变为5000 -
let retries = 0; retries ??= 3;→retries保持0(不赋值) - 常用于函数参数、对象属性初始化,比如
config.baseURL ??= 'https://api.example.com'
用 &&= 条件性更新(仅当左侧为真值时,才把右侧结果赋给左侧)
它相当于“如果左边是 truthy,就把左边与右边的逻辑与结果重新赋给左边”。使用较少,但适合开关控制或状态叠加。
-
let enabled = true; enabled &&= user.hasPermission;→ 若user.hasPermission为false,则enabled变为false -
let result = 'ok'; result &&= response.data;→ 如果response.data存在且真值,result更新为它;否则保持'ok'或变为false - 注意:
&&=的右侧表达式总会执行,但赋值只发生在左侧为 truthy 时
别混淆:它们不等于短路赋值的简写,而是真正的赋值运算符
逻辑赋值运算符有副作用(右侧表达式可能执行多次),且优先级低于普通赋值,需注意括号使用。例如:
-
a &&= b() + c();等价于a && (a = b() + c());,b()和c()总会调用 -
a ||= b || c;中的b || c先求值,再参与逻辑赋值 - 不支持链式写法如
a ||= b ||= c(语法错误),必须分开写
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











