javascript中可选链操作符(?.)用于安全访问可能为null或undefined的嵌套属性或方法,返回undefined而不报错,支持多层链式调用,并可与??配合提供默认值,但不可用于赋值。

JavaScript 中链式调用遇到可能为 null 或 undefined 的中间属性时,用可选链操作符(?.)可以安全跳过,避免报错。
基本语法:用 ?. 替代 .
当访问嵌套对象属性或调用方法时,在不确定某一层是否存在的地方插入 ?.:
-
obj?.prop:如果obj是null或undefined,整个表达式返回undefined,不报错 -
obj?.method():只在obj存在且method是函数时才调用,否则返回undefined -
arr?.[index]:安全访问数组索引,arr为空时也不报错
链式调用中多层可选访问
多个 ?. 可连用,形成真正“安全的链式”:
const userName = user?.profile?.name?.toLowerCase();
等价于手动判断:
const userName = user && user.profile && user.profile.name ? user.profile.name.toLowerCase() : undefined;
只要其中任意一环是 null 或 undefined,后续不再执行,直接返回 undefined。
和空值合并操作符 ?? 配合使用
可选链返回 undefined 时,常配合 ?? 提供默认值:
const city = user?.address?.city ?? '未知城市';
const items = data?.list?.filter(x => x.active) ?? [];
注意:?? 只在左侧为 <code>null 或 undefined 时生效,不会被 false、0、'' 触发。
限制与注意事项
可选链不能用于赋值或作为左值:
- ❌
obj?.prop = value(语法错误) - ❌
obj?.[key] = value(语法错误) - ✅ 但可以用于读取后赋值:
const tmp = obj?.prop; tmp && (tmp.value = 'ok');
函数调用需确保是“可选调用”,即写成 func?.(),而不是 func() 后加 ?.;若函数本身可能不存在,必须把 ?. 放在括号前。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











