可选链运算符(?.)用于安全访问嵌套属性,遇 null/undefined 立即返回 undefined 而不报错;支持点号访问、方法调用、数组索引、动态属性;需与 ?? 配合设默认值;不可用于赋值或单独使用,且不校验类型。

可选链运算符(?.)是 JavaScript 中用于安全访问嵌套对象属性的语法,它能在访问链中任意一环为 null 或 undefined 时立即返回 undefined,而不是抛出错误。
基本用法:替代冗长的空值检查
传统方式需要层层判断:
const street = user && user.address && user.address.city && user.address.city.name;
用可选链后简洁清晰:
const street = user?.address?.city?.name;
只要 user、address 或 city 中任一值为 null 或 undefined,整个表达式就直接返回 undefined,不继续执行后续访问。
支持多种访问形式
可选链不仅适用于点号属性访问,还支持以下场景:
-
方法调用:
obj?.method?.()—— 先检查method是否存在且为函数,再调用 -
数组索引:
arr?.[index]—— 防止对null/undefined数组取值 -
动态属性名:
obj?.[key]—— 安全读取计算出的属性名
与空值合并运算符(??)配合使用
可选链返回 undefined 时,常结合 ?? 提供默认值:
const name = user?.profile?.firstName ?? 'Anonymous';
这样既避免报错,又保证有兜底值,比 || 更准确(不会误把 0、false、'' 当作空)。
注意事项和限制
可选链只能出现在访问操作的左侧,不能用于赋值或声明:
- ✅ 合法:
obj?.prop、arr?.[0]、fn?.() - ❌ 不合法:
obj?.prop = value、?.prop单独使用、delete obj?.prop - ⚠️ 注意:
obj?.[key]?.()中,如果obj[key]存在但不是函数,调用仍会报错(TypeError),可选链只跳过null/undefined,不校验类型
不复杂但容易忽略:它只保护“访问过程”,不改变值本身的类型或行为。用对了,能大幅减少防御性代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











