可选链运算符(?.)解决嵌套对象属性访问时因null/undefined导致的运行时错误问题,通过在链式访问中遇空值立即返回undefined而非抛出错误,提升代码安全性与健壮性。

可选链运算符(?.)让访问嵌套对象属性时更安全:它会在遇到 null 或 undefined 时立即停止访问,并返回 undefined,而不是抛出错误。
它解决什么问题
在没有可选链之前,要安全读取 user.profile.address.city,得层层检查:
user && user.profile && user.profile.address && user.profile.address.city
一旦中间某层是 null 或 undefined(比如 user.profile 不存在),就会报 Cannot read property 'address' of undefined,整个脚本可能中断。
立即学习“Java免费学习笔记(深入)”;
可选链怎么用
只需在可能为空的属性前加 ?.:
-
user?.profile?.address?.city—— 某一层为null/undefined,整条表达式直接返回undefined,不继续执行后续访问 -
obj?.method?.()—— 先检查obj是否存在,再检查method是否是函数,最后才调用;任一环节失败就跳过调用,不报错 -
arr?.[index]—— 安全读取数组元素,arr为空也不崩溃
注意边界情况
可选链只保护「点号前」的值是否为空,不处理其他错误:
-
user?.profile.name中,如果user是null,表达式返回undefined;但如果user是对象而profile是字符串,profile.name会是undefined(不是报错),这是正常行为 -
user?.profile?.getName()如果getName存在但不是函数,仍会报TypeError: user.profile.getName is not a function—— 可选链不校验类型,只防空值 - 不能在赋值左侧使用:
user?.name = 'Alice'语法错误
配合空值合并运算符更实用
常和 ?? 搭配提供默认值:
const city = user?.profile?.address?.city ?? 'Unknown';
这样既避免崩溃,又确保有可用值,逻辑更健壮。











