可选链运算符?.()用于安全调用可能不存在的函数,先检查对象及属性是否存在且为函数,再执行调用;必须写成obj?.method?.(),不可省略中间的?.;常与??连用提供默认值。

可选链运算符 ?.() 是专为安全调用可能不存在的函数设计的。它会在执行前逐级检查:左侧对象是否存在、该属性是否为函数,任一环节为 null 或 undefined,就直接返回 undefined,不报错也不执行后续逻辑。
函数调用的基本写法
语法是 obj?.method?.(),注意两个关键点:
-
obj?.method先检查对象和方法是否存在(且是函数) - 再加
?.()表示“只在它是函数时才调用”
常见使用场景
适合处理以下情况:
- 第三方 API 方法在某些版本或环境中未实现(如
navigator.permissions?.query?.({name: 'geolocation'})) - 插件或模块动态注入的方法(如
window.myPlugin?.init?.()) - 回调函数可能未传入(如
options.onSuccess?.(data)) - React 中从 hook 返回的对象方法(如
useRouter()?.push?.('/home'))
不能省略的 ?. 位置
必须在函数名后紧跟 ?.(),不能写成 obj?.method() —— 这会报错,因为 JS 会尝试立即调用 method,而它此时可能是 undefined。
正确示例:
const result = api?.getData?.();const value = config?.transform?.(input);
const html = document.querySelector('.box')?.innerHTML;
配合空值合并提供默认行为
常与 ?? 运算符连用,给调用失败兜底:
user?.getName?.() ?? 'Anonymous'cache?.get?.(key) ?? fetchDefault(key)
这样既避免了错误,又保持了逻辑清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











