可选链调用 obj?.method?.() 在对象或方法为 null/undefined 时返回 undefined 而不报错;对比普通调用会抛 TypeError;适用于 API 不确定、兼容性差异、动态插件等场景。

调用一个不存在的方法时,使用可选链(?.())会直接返回 undefined,而不会抛出 TypeError。
方法调用场景下的行为
当用 obj?.method?.() 形式调用方法时,JavaScript 会在执行前检查左侧对象是否为 null 或 undefined:
- 如果
obj是null或undefined,整个表达式立即短路,返回undefined - 如果
obj存在但obj.method是undefined或null,同样短路返回undefined - 只有当
obj.method确实是一个函数时,才会真正执行调用
和普通点号调用的对比
不加可选链时,尝试调用不存在的方法会报错:
❌ 报错写法const result = obj.method(); // TypeError: obj.method is not a function✅ 安全写法
const result = obj?.method?.(); // undefined,无错误
常见适用情况
这类写法特别适合处理以下场景:
- 第三方 API 返回结构不确定,某些方法可能未实现
- 浏览器兼容性差异导致部分方法在旧设备上缺失(如
element.animate?.()) - 动态注入的对象或插件,其方法存在性无法静态保证
- React 中访问可能尚未挂载组件实例的方法(需谨慎,非首选模式)


















