空值合并运算符??专用于处理null/undefined:仅当左侧为null或undefined时返回右侧默认值,保留0、false、''等合法假值;常与?.搭配安全访问嵌套属性。

JavaScript 中没有叫“空值判断符”的内置运算符,但你可能指的是 空值合并运算符(??),它是 ES2020 引入的核心特性,专门用于处理 null 和 undefined 的默认值逻辑。
空值合并运算符 ?? 的作用
它只在左侧操作数为 null 或 undefined 时,才返回右侧操作数;其他“假值”(如 0、false、''、NaN)都会被原样保留。
-
const name = user.name ?? '匿名';→ 若user.name是undefined或null,才用'匿名' -
const count = itemCount ?? 0;→itemCount为0时不会触发默认值,仍得0 - 对比
||:若写成itemCount || 0,当itemCount是0时会错误地取0(因为0是假值),而??不会
?? 与可选链操作符 ?. 配合使用
实际开发中,?? 常和可选链操作符 ?. 搭配,安全访问深层属性并提供默认值:
-
const city = user?.address?.city ?? '未知城市';→ 即使user或address为null/undefined,也不会报错,最终取默认值 - 注意:
?.和??优先级不同,?.更高,所以无需额外括号
使用注意事项
?? 不能直接与 && 或 || 连用,否则会报语法错误(需加括号明确优先级):
立即学习“Java免费学习笔记(深入)”;
- ❌ 错误:
a ?? b || c - ✅ 正确:
(a ?? b) || c或a ?? (b || c),取决于你想表达的逻辑 - 它只做“空值兜底”,不替代类型检查或业务校验(比如字符串是否为空格、数组是否为空等,仍需单独判断)
替代方案对比(了解即可)
在 ?? 出现前,开发者常用以下方式模拟类似行为,但都不够精准:
-
||:会把所有假值都覆盖,不适合数值、布尔等场景 -
typeof x === 'undefined' || x === null ? y : x:准确但冗长 -
x != null ? x : y:利用!=的抽象相等规则(null和undefined互等),简洁但略隐晦,且易被 lint 工具警告


















