JavaScript可选链(?.)用于安全访问嵌套属性、方法、数组索引及动态属性,遇null/undefined即短路返回undefined;可与??搭配设默认值;不可用于赋值左端或链式调用中非可选部分。

JavaScript可选链(Optional Chaining)是一种安全访问嵌套对象属性的语法,它能避免因中间某层为 null 或 undefined 而抛出错误,让代码更简洁、健壮。
可选链的基本写法:用 ?. 替代 .
传统方式访问深层属性时,必须逐层检查是否为有效值,否则会报错:
const street = user && user.address && user.address.street;用可选链后,一行就能搞定:
const street = user?.address?.street;如果 user 是 null 或 undefined,整个表达式直接返回 undefined,不会继续访问 address;同理,若 address 无效,也不会尝试读取 street。
立即学习“Java免费学习笔记(深入)”;
支持多种访问形式
可选链不仅适用于点号属性访问,还兼容以下场景:
-
方法调用:
obj?.method?.()—— 先检查obj和method是否存在,再执行 -
数组索引:
arr?.[index]—— 防止arr为空时访问索引报错 -
动态属性名:
obj?.[key]—— 安全读取计算出的属性名
配合空值合并操作符 ?? 设置默认值
可选链返回 undefined 时,常需提供兜底值。这时和空值合并操作符搭配非常自然:
它只在左侧为 null 或 undefined 时才使用右侧值,比 || 更精准(例如不会把 0、false、'' 当作“空”)。
注意边界情况
可选链不是万能的,使用时需留意:
- 不能用于赋值左侧:
obj?.prop = value会报语法错误 - 不能跨可选链调用非可选方法:
obj?.method()?.toString()中,若method()返回undefined,后面的toString()仍会报错 - 不触发 getter 的副作用(如果有的话),因为访问被短路了










