空值合并操作符(??)和可选链(?.)配合使用是 javascript 中安全访问深层嵌套属性并提供默认值的推荐方式:用 ?. 防止因 null/undefined 报错,再用 ?? 为 null/undefined 值提供默认值,且 ?? 不将 0、false、'' 视为空值。

空值合并操作符(??)和可选链(?.)配合使用,是 JavaScript 中安全访问深层嵌套属性、避免 TypeError 的推荐方式。核心思路是:用 ?. 防止访问 null 或 undefined 的属性,再用 ?? 提供默认值。
用可选链安全读取嵌套属性
可选链会在遇到 null 或 undefined 时立即返回 undefined,不再继续执行后续访问,从而避免报错。
-
user?.profile?.address?.city:如果user、profile或address任意一个为null/undefined,整个表达式返回undefined,不会抛出错误 - 支持方法调用:
obj?.method?.();支持数组索引:arr?.[0]?.name
用空值合并提供默认值
?? 只在左侧值为 null 或 undefined 时才使用右侧默认值(注意:它不会把 0、false、'' 当作“空”)。
-
user?.profile?.age ?? 18:若age不存在或为null/undefined,返回18;若值为0或false,仍保留原值 - 避免误用
||:比如user?.score || 100在score为0时也会返回100,而??不会
组合使用提取深层变量并设默认值
两者连用,形成「安全访问 + 默认兜底」的完整链条,适合处理不确定结构的数据(如 API 响应)。
const city = response?.data?.user?.location?.city ?? 'Unknown'const avatar = user?.settings?.theme?.avatarUrl ?? '/default-avatar.png'- 嵌套函数调用:
config?.getFeature?.('darkMode') ?? false
注意事项和常见陷阱
组合虽简洁,但需注意语法优先级和边界情况:
-
??优先级低于?.,所以a?.b ?? c等价于(a?.b) ?? c,无需额外括号 - 不能在赋值左侧使用可选链:
obj?.prop = value是语法错误,必须先确保对象存在 - 可选链不适用于动态属性名(
obj?.[key]合法),但obj?.['key']和obj?.[someVar]都可以 - 若需兼容旧环境,需通过 Babel 转译(ES2020+ 特性)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











