空值合并运算符(??)仅在左侧为null或undefined时返回右侧默认值,保留0、false、''等合法假值;常用于api响应、配置项默认填充及与可选链?.搭配处理嵌套属性。

空值合并运算符(??)用于在左侧操作数为 null 或 undefined 时,返回右侧操作数;其他“假值”(如 0、false、'')不会触发回退。
区分 ?? 和 ||
这是最关键的使用前提。很多人误用 || 设默认值,结果导致 0、false、空字符串等合法值被意外覆盖:
-
0 || 10→10(0是假值,||会回退) -
0 ?? 10→0(0不是 null/undefined,??保留原值) -
null ?? 'default'→'default' -
undefined ?? 42→42
常见默认值场景
适合用 ?? 的典型情况包括配置项、API 响应字段、函数参数解构等:
- 对象属性访问:
user?.name ?? '匿名用户'(配合可选链更安全) - 函数参数默认值:
function greet(name) { return `Hello, ${name ?? 'guest'}`; } - 解构赋值:
const { theme = 'light', fontSize } = config; const realSize = fontSize ?? 16; - 从 localStorage 读取:
const savedColor = JSON.parse(localStorage.getItem('color')) ?? '#333';
注意优先级和嵌套使用
?? 的优先级低于 ??=、&&、||,但高于赋值运算符。混合使用时建议加括号明确意图:
- ✅ 安全写法:
(a ?? b) || c—— 先空值回退,再逻辑或 - ❌ 易错写法:
a ?? b || c等价于a ?? (b || c),可能不符合预期 - ✅ 链式回退:
user?.profile?.age ?? user?.defaultAge ?? 18
不适用的场景要避免
?? 只检测 null 和 undefined,对其他无效值(如空对象、NaN、非法字符串)无感知:
-
{} ?? 'empty'→{}(空对象不是 null/undefined,不会回退) -
NaN ?? 0→NaN(NaN 是有效值) - 若需处理空字符串或 0,应结合条件判断:
(str ?? '').trim() || 'default'
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











