可选链操作符?.用于安全访问嵌套属性或调用方法,遇null/undefined即返回undefined而非报错;支持对象属性、函数调用、数组索引及动态键名,并常与??配合提供精确默认值。

用可选链操作符 ?. 能在访问嵌套属性或调用方法时,遇到 null 或 undefined 就自动停止并返回 undefined,而不是抛出 TypeError 导致脚本崩溃。
安全读取深层对象属性
当对象结构不确定(比如 API 返回数据字段可能缺失),直接点链式访问容易报错:
传统写法(冗长且易漏):const city = user && user.address && user.address.city;
可选链写法(简洁、防崩):const city = user?.address?.city;
只要 user 或 address 是 null/undefined,整个表达式立刻返回 undefined,不执行后续访问。
安全调用可能不存在的函数
适用于回调、插件方法、DOM 方法等可能未定义的场景:
-
element?.addEventListener?.('click', handler)—— 如果element为空或addEventListener不存在,不会报错 -
config?.init?.()—— 只有config存在且init是函数时才调用
注意:obj?.method?.() 中两个 ?. 都必要:第一个保 method 存在,第二个保它是可调用函数。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
安全访问数组或动态键名
对可能为空的数组或计算属性名同样有效:
-
list?.[0]?.name——list为null时返回undefined;即使list存在但list[0]是undefined,也不会报错 -
obj?.[key]—— 比如data?.[responseType],data为空时静默处理
搭配 ?? 提供默认值更可靠
单独用 ?. 返回 undefined,常需兜底。此时接空值合并操作符 ?? 最自然:
const name = user?.profile?.name ?? 'Anonymous';const count = items?.length ?? 0;
⚠️别用 || 替代:user?.age || 0 在 age === 0 时也会 fallback,而 user?.age ?? 0 只在 null/undefined 时生效。

















