可选链(?.)用于安全访问嵌套属性、方法或数组元素,避免因null/undefined报错;适用于不确定对象或中间属性是否存在时,如user?.profile?.address?.city;不可用于赋值左侧或delete操作。

可选链(Optional Chaining)是 JavaScript 中用于安全访问嵌套对象属性的运算符,用 ?. 表示。它能避免因中间某层为 null 或 undefined 而抛出错误,让代码更简洁、健壮。
什么时候该用 ?.
当你不确定某个对象是否存在,或它的某一层属性可能为空时,就适合用可选链。比如从 API 响应中读取 user.profile.address.city,但 user、profile 或 address 都可能没定义。
- 访问对象属性:
obj?.prop - 调用方法:
obj?.method()(方法不存在或为null/undefined时直接返回undefined,不报错) - 访问数组元素:
arr?.[index] - 可连续使用:
user?.profile?.settings?.theme
?., ?? 和 && 的区别别搞混
?. 解决的是“访问路径是否安全”,只管中间有没有值;??(空值合并)解决的是“取不到值时用什么兜底”;而 && 是逻辑判断,会把假值(如 0、''、false)也当成“无效”处理。
-
user?.name ?? '匿名':name 为undefined或null时用‘匿名’,但如果是''或0,仍会原样返回 -
user?.name || '匿名':name 是''、0、false也会触发默认值,不精准 -
user && user.profile && user.profile.city写法冗长,且无法用于方法调用
注意这些常见坑
可选链不是万能的,有几点必须留意:
立即学习“Java免费学习笔记(深入)”;
- 只能用在明确可能为
null或undefined的位置,不能写成obj?.[key]除非你确定obj可能为空——否则直接obj[key]更合适 - 不能在赋值左侧使用:
obj?.prop = value语法错误 - 和 delete 搭配无效:
delete obj?.prop不合法 - 函数调用前加
?.,若函数本身是undefined,不会执行,也不报错;但如果函数存在但内部抛错,依然会冒泡
配合解构更实用
可选链可以和解构一起用,提升可读性。例如从响应中安全提取字段:
const { name, email } = response?.data?.user ?? {};
这样即使 response、data 或 user 缺失,也不会报错,且 name 和 email 默认为 undefined,后续可用 ?? 设置默认值。


















