什么是 Optional Chaining?
Optional chaining 是一个现代 JavaScript 语法特性,允许开发者在读取对象内部嵌套属性时安全地处理 undefined
或 null
值。这种语法通过 ?.
操作符实现,可以避免在查询属性或调用方法时因为中间某个环节不存在而引发错误。
Optional chaining 的基本使用示例如下
1 2 3 4 5 6 7 8
| const obj = { a: { b: { c: 1 } } };
|
1 2
| const value = obj && obj.a && obj.a.b && obj.a.b.c;
|
1 2 3
| const valueWithOptionalChaining = obj?.a?.b?.c;
const undefinedValue = obj?.a?.nonExistingProp?.c;
|
Optional chaining 可以用于四种不同的操作
- 对象属性访问
如上例所示,可以安全地访问嵌套对象属性。
- 数组索引访问
可以安全地访问数组的索引,如果数组是 undefined 或 null,则不会报错。
1 2 3
| const arr = [1, 2, 3]; const valueAtIndex = arr?.[2]; const nonExistingIndex = arr?.[5];
|
- 函数或方法调用
如果不确定一个对象上的函数是否存在,可以使用 optional chaining 安全地调用函数或方法。
1 2 3 4 5 6 7 8
| const obj = { a: () => { console.log('Function exists'); } };
obj.a?.(); obj.b?.();
|
- 默认值中使用
1 2 3
| const user = {}; const name = user?.name ?? "匿名用户"; console.log(name);
|
要注意的是,optional chaining 语法是 ECMAScript 2020(ES11)的一部分,因此在老旧的 JavaScript 环境中可能不受支持。对于这些环境,可以使用 Babel 这样的工具来转译代码,使其兼容。