Optional chaining 语法编程

·287 字 · 约 1 分钟#前端#JavaScript#es6

什么是 Optional Chaining?#

Optional chaining 是一个现代 JavaScript 语法特性,允许开发者在读取对象内部嵌套属性时安全地处理 undefinednull 值。这种语法通过 ?. 操作符实现,可以避免在查询属性或调用方法时因为中间某个环节不存在而引发错误。

Optional chaining 的基本使用示例如下#

const obj = {
    a: {
        b: {
            c: 1
        }
    }
};
// 传统的深层属性访问可能会抛出错误,如果某个属性不存在
const value = obj && obj.a && obj.a.b && obj.a.b.c;
// 使用 optional chaining 语法,安全地读取嵌套属性
const valueWithOptionalChaining = obj?.a?.b?.c; // 输出 1
// 如果中间某个属性不存在,表达式会返回 undefined,而不是抛出错误
const undefinedValue = obj?.a?.nonExistingProp?.c; // 输出 undefined

Optional chaining 可以用于四种不同的操作#

  1. 对象属性访问

如上例所示,可以安全地访问嵌套对象属性。

  1. 数组索引访问

可以安全地访问数组的索引,如果数组是 undefined 或 null,则不会报错。

const arr = [1, 2, 3];
const valueAtIndex = arr?.[2]; // 输出 3
const nonExistingIndex = arr?.[5]; // 输出 undefined
  1. 函数或方法调用

如果不确定一个对象上的函数是否存在,可以使用 optional chaining 安全地调用函数或方法。

const obj = {
a: () => {
    console.log('Function exists');
}
};

obj.a?.(); // 输出 'Function exists'
obj.b?.(); // 由于 b 不存在,不执行任何操作,返回 undefined
  1. 默认值中使用
const user = {};
const name = user?.name ?? "匿名用户";
console.log(name);

要注意的是,optional chaining 语法是 ECMAScript 2020(ES11)的一部分,因此在老旧的 JavaScript 环境中可能不受支持。对于这些环境,可以使用 Babel 这样的工具来转译代码,使其兼容。


本文由 note.batype.com 导入。

相关文章

  • 对原型、原型链的理解

    在 JavaScript 中是使用构造两数来新建一个对象的,每一个构造函数的内部都有一个 prototype 属性,它的属性值是一个对象,这个对象包含了可以由该构造西数的所有实例共享的属性和方法。 当

  • var、let、const 的区别

    1. var 声明作用域 var 定义的变量,没有块的概念,可以跨块访问,不能跨函数访问

  • async/await 的理解

    async/await 其实是 Generator 的语法糖,它能实现的效果都能用 then 链来实现,它是为优化 then 链而开发出来的。从字面上来看,async 是 “异步” 的简写,await