可选链操作符(?.)用于安全访问嵌套属性或调用方法,遇null/undefined即返回undefined而不报错;可与空值合并操作符(??)配合提供默认值;但仅对null/undefined短路,不处理其他假值。

可选链操作符(?.)能帮你避免一长串的 if 判断或重复的 && 检查,尤其在处理嵌套对象或可能为 null/undefined 的属性时特别管用。
安全访问深层嵌套属性
以前要读取 user.address.street.name,得层层判断:
const name = user && user.address && user.address.street && user.address.street.name;
现在一行搞定:
const name = user?.address?.street?.name;
只要中间任意一环是 null 或 undefined,整个表达式就返回 undefined,不会报错。
配合函数调用更省心
调用可能不存在的方法时,不用再写 if (obj?.method):
-
obj?.method?.()—— 只有obj存在且method是函数才执行 -
arr?.[0]?.toUpperCase?.()—— 安全取数组首项并调用字符串方法
和空值合并操作符(??)搭档用效果更好
可选链返回 undefined 时,常需要提供默认值:
const city = user?.address?.city ?? '未知城市';
这样既避免了错误,又补上了兜底值,逻辑清晰还不啰嗦。
注意不能滥用的边界情况
可选链只对 null 和 undefined 短路,其他假值(如 0、false、'')照常参与计算:
-
obj?.count?.toFixed(2)中,count是0会正常执行 - 但
obj?.count是undefined就直接返回undefined
别把它当成“万能防错”,它只解决“属性是否存在”的问题,不是“值是否有效”的判断。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











