用 ES2020 中新增的可选链操作符优雅地访问对象

在前端开发中,我们经常需要访问对象的属性或方法。如果对象嵌套层数比较深,则需要使用多个 && 运算符来访问其中某个属性或方法,这样的代码不仅不美观,而且不易读。好在 ES2020 中新增了可选链操作符,可以优雅地访问对象,本文将详细介绍这个语法特性。

可选链操作符

可选链操作符是一个 ?,它紧跟在对象属性或方法名之后,表示如果该属性或方法存在,则访问该属性或方法,否则返回 undefined

下面是一个示例,使用 ? 访问一个嵌套对象的属性:

----- ------ - -
  ----- --------
  ---- ---
  ---- -
    ----- ---------
    ----- -----
  -
-

----- ------- - ---------------- -- ------
----- ------- - ---------------- -- ---
----- ------ - --------------- -- ---------

在上面的示例中,我们使用可选链操作符 ? 来访问 person.pet 对象的 nametype 属性,如果 person.pet 不存在,那么 petNamepetType 将返回 undefined

此外,可选链操作符还可以用于访问数组的元素和方法。下面是一个示例,使用 ? 访问一个数组的第一个元素:

----- --- - --
----- --------- - -------- -- ---------

在上面的示例中,我们使用可选链操作符 ? 来访问空数组 arr 的第一个元素,因为 arr 为空数组,所以 firstElem 将返回 undefined

替代多个 && 运算符

在访问对象的属性或方法时,我们经常需要使用多个 && 运算符。下面是一个使用 && 运算符访问嵌套对象属性的示例:

----- ------ - -
  ----- --------
  ---- ---
  ---- -
    ----- ---------
    ----- -----
  -
-

----- ------- - ---------- -- --------------- -- ------
----- ------- - ---------- -- --------------- -- ---
----- ------ - ---------- -- -------------- -- ---------

在上面的示例中,我们使用 && 运算符来访问 person.pet 对象的 nametype 属性,如果 person.pet 不存在,则返回 undefined

使用可选链操作符 ? 可以替代上面的代码,使代码更简洁和易读。下面是上面示例的可选链版本:

----- ------ - -
  ----- --------
  ---- ---
  ---- -
    ----- ---------
    ----- -----
  -
-

----- ------- - ---------------- -- ------
----- ------- - ---------------- -- ---
----- ------ - --------------- -- ---------

注意事项

在使用可选链操作符时,需要注意以下几点:

  1. 可选链操作符 ? 必须紧跟在对象属性或方法名之后,否则会报错。

  2. 在使用可选链操作符访问对象属性时,如果对象存在但属性不存在,则返回 undefined。而在访问对象方法时,如果方法不存在,则不会抛出异常,而是返回 undefined

  3. 可选链操作符还支持调用函数。下面是一个示例,使用可选链操作符调用对象方法:

    ----- ------ - -
      ----- --------
      ---- ---
      ------- -
        ------------------- -- ---- -- --------------
      -
    -
    
    ---------------- -- ------ -- ---- -- -----

    在上面的示例中,我们使用可选链操作符 ? 来调用对象的 greet 方法,如果 person.greet 不存在,则不会抛出异常,而是返回 undefined

总结

在本文中,我们学习了 ES2020 中新增的可选链操作符 ?,它可以优雅地访问嵌套对象的属性和方法,可以替代多个 && 运算符,使代码更简洁和易读。但是在使用可选链操作符时,需要注意以上几点。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6489164548841e9894762045


猜你喜欢

  • 提高 Node.js 应用性能的技巧和工具

    Node.js 是一个快速的、轻量级的 JavaScript 运行环境,由于其高效性和灵活性,在前端开发中得到了广泛的应用。虽然 Node.js 有许多优点,但在开发大型应用时,应用性能可能会受到影响...

    1 年前
  • Kubernetes 中的 Namespace 详解

    前言 Kubernetes 是一个流行的容器编排平台,它可以帮助我们管理大规模的容器化应用程序。随着企业中使用 Kubernetes 的普及率不断增加,管理者必须考虑如何在更大、更复杂的环境中管理容器...

    1 年前
  • Chai-Exclude:测试对象的属性与给定的规则是否不匹配

    前言 在前端开发过程中,自动化测试是必不可少的一项工作。在测试对象中,经常需要判断某些属性是否 不 满足某些规则。这时候,一个好用的第三方工具 Chai-Exclude 就派上用场了。

    1 年前
  • Serverless 架构下,H5 跳转原生 App 方案探究

    在当前互联网时代,前端开发具备了越来越重要的地位,其中 H5 技术也愈加成熟。但是在某些场景下,需要把用户引导到原生 App 上,这就需要 H5 和原生 App 之间相互通信。

    1 年前
  • 使用 ES2021 的 WeakRef: 避免内存泄露问题的解决方案

    随着前端应用的不断发展,应用的复杂度也在不断提高。其中一个问题就是内存泄露。内存泄露指的是程序中的对象已经不再使用,但仍然在内存中占据空间,无法被垃圾收集器回收,造成内存浪费和应用的性能问题。

    1 年前
  • 记一次 vue-cli 项目空白页面跳转的问题

    在前端开发的过程中,我们都会遇到一些问题。有些问题比较简单,只需要一定的耐心和细心就可以解决。但是,有些问题则需要我们更深入的了解技术原理和调试工具来解决。在这篇文章中,我将记录并分享一次处理 vue...

    1 年前
  • 如何在 Vue.js 中使用 Material Design 组件

    Material Design 是 Google 推出的一套物料设计语言,旨在提供简单、直观、具有高度一致性的设计组件,促进移动应用、桌面应用和 Web 应用程序的一致性。

    1 年前
  • 如何在 Jest 中测试 OpenAPI 地址

    前端开发过程中,与后端接口联调是必不可少的步骤。其中,OpenAPI 是一种常见的接口规范,通过它我们可以快速、方便地了解后端提供的接口信息。但是,如何在 Jest 中测试 OpenAPI 地址呢?本...

    1 年前
  • PM2 如何实现负载均衡和故障恢复

    在开发 Web 应用程序时,我们通常会使用 Node.js 作为后端技术栈。而 PM2 是一个非常强大的进程管理器,它可以帮助我们实现负载均衡和故障恢复,从而提高应用程序的性能和可靠性。

    1 年前
  • 使用 ECMAScript 2016 (ES7) 去除字符串空格

    在前端开发中,字符串的空格去除是一项基本且常见的任务。在 ECMAScript 2016 (ES7) 中,JavaScript 新增了一个字符串方法 trimStart() 和 trimEnd(),它...

    1 年前
  • Cypress 自动化测试实践:如何与 Travis CI 集成

    前言 在现代化的软件开发中,自动化测试已经成为不可或缺的一部分。Cypress 是一款流行的前端自动化测试框架,它可以用来编写端到端测试脚本,并模拟用户在浏览器中与网页交互的各种场景。

    1 年前
  • 基于 Server-Sent Events 实现 HTML5 实时聊天室

    随着 Web 技术的不断发展,实时通信的需求越来越大。传统的 HTTP 请求响应模式无法满足实时通信的需求,因此 HTML5 引入了一种新的通信协议,即 Server-Sent Events(SSE)...

    1 年前
  • 在 Node.js 项目中使用 Enzyme 进行单元测试

    在开发 Node.js 项目时,单元测试是非常重要的一步。单元测试可以帮助我们保证代码的质量,及时发现和修复潜在的问题,提高代码的可维护性和可扩展性。 在本文中,我们将介绍如何在 Node.js 项目...

    1 年前
  • koa 中使用 Redis 作为 session 存储

    在 Web 应用开发中,session 是保持用户状态的一种常用方法。koa 框架默认提供了基于内存的 session 存储,但随着用户量的增加,这种方式已经无法满足性能需求。

    1 年前
  • Node.js 中如何实现文件上传和下载?

    在 Web 应用程序的开发中,文件上传和下载是一项非常重要的功能,它能够为用户提供方便快捷的文件传输方式。Node.js 作为一种服务器端的技术,也能够提供文件上传和下载的服务,本文将介绍如何在 No...

    1 年前
  • 如何在 LESS 中实现基于 BEM 规范的样式命名

    在前端开发中,CSS 是我们进行页面样式定义的一种语言,但是在大型项目中,如果样式命名混乱,样式重复、嵌套等问题可能会大大影响开发效率和后期维护性,因此采用 BEM 规范来定义样式命名是一个很好的选择...

    1 年前
  • Mongoose 中的 Schema Types 使用详解

    在使用 Mongoose 构建 MongoDB 数据库时,我们需要使用 mongoose.Schema() 创建 schema(数据表结构),其中需要指定每个字段的类型。

    1 年前
  • Redis 的事务机制详解

    前言 Redis 是当下最流行的内存键值存储数据库,因为性能高、可扩展性好、可靠性高等众多优点而受到了广泛的关注和使用。Redis 的事务机制是 Redis 的一个重要特性之一,本文将重点介绍 Red...

    1 年前
  • 使用 Mocha 测试 React 组件的断言优化

    前端开发中,测试是非常重要的一环。在 React 组件开发中,使用 Mocha 进行单元测试是很常见的。Mocha 是一个 JavaScript 测试框架,可以实现用于测试前端代码的性能及可靠性。

    1 年前
  • Socket.io 如何使用 Https 协议进行数据传输

    介绍 Socket.io 是一个开源的 JavaScript 库,它实现了实时、双向、事件驱动的数据传输。它是基于 WebSockets 技术实现的, 并能够兼容旧版的浏览器和环境。

    1 年前

相关推荐

    暂无文章