||= 最适合为变量设置默认值且仅在左侧为假值(false、0、''、null、undefined、nan)时赋值的场景;它短路执行、语义清晰,但不适用于 const 变量或可选链,且与 ??= 的 null/undefined 判断逻辑不同。

JavaScript 中的 ||= 是逻辑 OR 赋值运算符,用于在左侧操作数为“假值”(falsy)时,才将右侧表达式的值赋给左侧变量。它能简洁替代传统 if (!a) a = b 或 a = a || b 的写法,但要注意它基于“假值判断”,不是“是否未定义”。
什么时候用 ||= 最合适?
适用于你想为变量设置一个默认值,且只在它当前是 false、0、''(空字符串)、null、undefined 或 NaN 时才生效的场景。比如初始化配置、缓存、计数器等。
-
let count; count ||= 0;→count是undefined(假值),所以被赋为0 -
let name = 'Alice'; name ||= 'Anonymous';→name是真值,不重新赋值,仍为'Alice' -
let items = []; items ||= ['default'];→ 空数组[]是真值,不会覆盖
和 ??= 的关键区别
||= 检查的是“假值”,而 ??=(空值合并赋值)只在左侧为 null 或 undefined 时才赋值。这意味着:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
let x = 0; x ||= 10;→x变成10(因为0是假值) -
let x = 0; x ??= 10;→x仍是0(因为0不是null或undefined) - 想设默认值又不想覆盖
0或''?优先用??=
常见误用与注意事项
||= 是“短路赋值”,右侧表达式仅在需要时执行;但它不支持属性访问或复杂左值,且不能用于 const 声明的变量。
- ✅ 正确:
let user; user ||= fetchUser();(fetchUser()仅在user为假值时调用) - ❌ 错误:
const config = {}; config.theme ||= 'light';(报错:不能给const变量重新赋值) - ⚠️ 注意:
obj?.prop ||= value语法无效,需先确保obj.prop可写,再用obj.prop ||= value
替代写法对比(一目了然)
以下三行效果相同,但 ||= 更简短、语义更清晰:
if (!settings.timeout) settings.timeout = 5000;-
settings.timeout = settings.timeout || 5000;(注意:会重复读取settings.timeout,且可能触发 getter) -
settings.timeout ||= 5000;(推荐:一次读取、短路、可读性强)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










