空值合并运算符(??)仅在左侧为null或undefined时返回右侧默认值,不将0、false、''等falsy值视为缺失;常用于api响应默认填充,与可选链?.天然搭配,优先级低于&&和||。

空值合并运算符(??)只在左侧操作数为 null 或 undefined 时,才返回右侧的默认值;它不会把 0、false、''(空字符串)等“falsy 值”当作兜底条件,这点和逻辑或 || 有本质区别。
明确区分 null/undefined 和其他 falsy 值
这是理解 ?? 的核心。它只关心“是否真正缺失”,不关心“是否为假”:
-
0 ?? 10→0(0 是有效数值,不触发兜底) -
false ?? true→false(false 是合法布尔值) -
'' ?? 'default'→''(空字符串是有效字符串) -
null ?? 'fallback'→'fallback' -
undefined ?? 42→42
常用于配置项和 API 响应的默认填充
从后端获取的数据字段可能为 null 或未定义,但允许为 0 或 false(比如开关状态、计数器),这时 ?? 更安全:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
const count = response?.data?.totalCount ?? 0;(避免把null当成 0) -
const theme = userPrefs?.theme ?? 'light';(仅当 theme 没传或为 null 才用 light) - 错误写法:
userPrefs?.theme || 'light'—— 如果theme是''或false,也会被覆盖
可链式组合,但注意优先级
?? 优先级低于 ??=、&&、||,但高于三元运算符;混合使用时建议加括号避免歧义:
-
const x = a ?? b ?? c;等价于const x = (a ?? b) ?? c; -
const y = a && b ?? c;实际是(a && b) ?? c,不是a && (b ?? c) - 稳妥写法:
const y = a && (b ?? c);
与可选链(?.)天然搭配
两者配合能简洁处理深层嵌套中的缺失值:
const name = user?.profile?.name ?? 'Anonymous';const avatar = user?.settings?.avatarUrl ?? '/default-avatar.png';- 如果
user是null,?.返回undefined,再由??接管兜底
不复杂但容易忽略:它只认 null 和 undefined,别的都算“有值”。用对了,能避开很多因误判 falsy 值导致的默认值覆盖问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










