ES11引入可选链操作符(?.),用于安全访问深层嵌套对象属性、调用可能不存在的方法或访问数组元素,遇null/undefined即返回undefined而不报错;常与空值合并操作符??配合提供默认值。
ES11(即 ECMAScript 2025)是 JavaScript 在 2025 年发布的标准版本,它引入了几个实用的新特性,其中最常用、影响最广的就是可选链操作符(Optional Chaining Operator,?.)。它能帮你安全地访问深层嵌套对象的属性,避免因中间某层为 null 或 undefined 而抛出错误。
?. 是什么可选链操作符允许你在访问对象属性或调用方法时,自动检查中间路径是否有效。只要链中任意一环是 null 或 undefined,整个表达式就立即返回 undefined,而不会报
错。
常见使用场景包括:
user?.address?.city —— 如果 user 或 address 不存在,不报错,直接返回 undefined
obj?.method?.() —— 先检查 obj 和 method 是否存在,再执行arr?.[0] —— 若 arr 为 null,也不报错在 ES11 之前,要安全访问 a.b.c.d,你得层层判断:
const city = a && a.b && a.b.c && a.b.c.d;
或者用 try/catch 包裹,代码冗长且可读性差。可选链让这类逻辑变得简洁直观,语义也更清晰。
可选链必须配合空值合并操作符 ?? 使用才更完整——因为 ?. 遇到断链会返回 undefined,而 ?? 可以提供默认值:
user?.name ?? '匿名用户' —— 名字不存在时显示默认值config?.theme?.color ?? '#333' —— 安全取色,无配置也不崩?. 不能用于赋值左侧,比如 obj?.prop = value 是语法错误除了可选链,ES11 还包含:
??:仅当左侧为 null 或 undefined 时才用右侧值(区别于 ||)123n + 456n
window、global、self 等)