ES2020 新特性:可选链操作符

JavaScript 是一门十分灵活的语言,但在处理对象属性的时候可能会遇到一些问题。经常会发生的情况是:我们希望访问一个对象的属性,但是这个对象可能不存在或者这个属性可能不存在。在这种情况下,我们通常需要写一些冗长的代码,用来检查对象和属性是否存在,才能安全地访问它们。ES2020 引入了可选链操作符(optional chaining operator)来解决这个问题。

可选链操作符的使用

可选链操作符的基本语法是:?.。它可以用于访问对象属性、函数,以及数组元素。如果对象不存在或者属性不存在,操作符就会返回 undefined 而不是抛出错误。

下面是一个使用可选链操作符的例子:

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

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

在上面的代码中,我们使用了可选链操作符来访问 game.developer.country 这个属性。如果 game.developer 不存在,那么变量 country 的值就会是 undefined。使用可选链操作符的代码比使用传统的检查方式更加简洁和易读。下面是一个使用传统方式的代码:

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

在这个例子中,我们使用了传统的逻辑运算符 &&,来检查 game.developer 是否存在。但是这段代码比使用可选链操作符要繁琐得多。

除了访问对象属性,我们还可以使用可选链操作符来调用函数。下面是一个使用可选链操作符调用函数的例子:

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

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

在这个例子中,我们使用了可选链操作符来调用 foo.bar() 这个函数。如果 foo 对象不存在,或者 bar() 这个函数不存在,那么代码就不会报错。如果我们不使用可选链操作符,那么代码就要变得非常繁琐,需要使用条件检查来避免错误。下面是一个不使用可选链操作符的例子:

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

这个例子使用了条件检查来确保 foo 存在并且 foo.bar() 存在。

可选链操作符的嵌套使用

在实际的开发中,我们经常需要访问多层嵌套的对象,或者调用多层嵌套的函数。在这种情况下,可选链操作符可以非常方便地解决问题。下面是一个使用可选链操作符多级嵌套的例子:

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

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

在这个例子中,我们使用了两个可选链操作符来访问 game.developer.engine.version 这个属性。如果 game 对象、developer 对象、engine 对象、或者 version 属性不存在,那么代码就不会报错。

可选链操作符和 nullish 合并操作符的结合使用

上面介绍了可选连操作符的基本用法,但是在实际的开发中,我们还需要处理一些特殊的情况,比如当属性的值为 nullundefined 时,我们需要特别处理。为了解决这个问题,ES2020 还引入了一个新的操作符,叫做 nullish 合并操作符(nullish coalescing operator)。

nullish 合并操作符的语法是 ??。它用来检查左侧的表达式是否为 nullundefined,如果是,那么返回右侧的值。下面是一个使用 nullish 合并操作符的例子:

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

在这个例子中,我们使用了 nullish 合并操作符来判断变量 name 的值是否为 nullundefined。如果是,那么变量的值就会是 'Anonymous'。如果没有使用 nullish 合并操作符,那么代码就要变得非常繁琐,需要使用条件判断来判断变量是否为 nullundefined。下面是一个不使用 nullish 合并操作符的例子:

--- -----

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

nullish 合并操作符和可选链操作符可以很好地配合使用,来处理特殊情况。下面是一个使用两个操作符结合的例子:

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

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

在这个例子中,我们使用了 nullish 合并操作符来检查 game.discount 是否为 null,如果是,那么就使用 game.price。接着,我们使用可选链操作符来访问 game.price,以避免属性不存在的错误。

总结

可选链操作符是一项非常实用的新特性,它可以让我们写出更加简洁、易读的代码,避免访问不存在的属性或调用不存在的方法时出现错误。在实际开发中,我们经常需要访问多层嵌套的对象,使用可选链操作符可以非常方便地解决这个问题。如果属性的值为 nullundefined,我们可以使用 nullish 合并操作符来检查它们,以判断变量的值是否需要特殊处理。使用可选链操作符和 nullish 合并操作符可以让我们更加方便地处理复杂的代码逻辑。

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


猜你喜欢

  • Express.js 中如何处理 POST 请求参数

    Express.js 是目前非常流行的 Node.js Web 框架之一,它提供了一系列方便快捷的 API 来简化 Web 开发中的各种工作,包括处理 HTTP 请求和响应,路由等。

    1 年前
  • 在 Kubernetes 中使用 Secrets 中的 TLS 证书

    在 Kubernetes 中使用 Secrets 中的 TLS 证书 在现代应用程序中,加密是一项非常重要的安全措施。TLS 证书是一种数字证书,用于加密在网上传输的数据。

    1 年前
  • Tailwind CSS 详解:超详细的快速入门指南

    前言 Tailwind CSS 是一套功能强大而高效的 CSS 框架,可以帮助你更快速、更轻松、更灵活地编写网站或应用程序界面的样式。 在本篇文章中,我们将为大家介绍如何快速入门 Tailwind C...

    1 年前
  • 处理 GraphQL 引用循环的几种方法

    GraphQL 是一种 API 查询语言,它允许我们更简单地构建客户端应用程序。与 RESTful API 不同,GraphQL 的查询是由客户端定义的,这样客户端可以只请求它们需要的数据,而不是所有...

    1 年前
  • 如何实现 Material Design 中无宽度的 App Bar?

    Material Design 中的 App Bar 可以分为有宽度和无宽度两种类型。有宽度的 App Bar 是指有一个固定高度和固定宽度的导航栏,而无宽度的 App Bar 是指没有固定宽度,可以...

    1 年前
  • 用 Enzyme 测试 React 组件时解决 'Invalid Enzyme object' 报错的方法

    用 Enzyme 测试 React 组件时解决 'Invalid Enzyme object' 报错的方法 介绍 Enzyme 是 Facebook 推出的一个 React 组件测试工具,它可以帮助我...

    1 年前
  • Headless CMS 还是 CMS 好?

    在当下互联网时代,内容管理系统(CMS)变得越来越重要,因为它们能够使网站开发者快速创建和管理内容。但是,随着前端技术的发展,一种新型的内容管理系统——Headless CMS也开始流行起来。

    1 年前
  • Hapi 框架中使用 Socket.IO 实现聊天室

    Socket.IO 是一个基于 WebSocket 协议的实时应用程序开发库,它提供了一种实时双向通信的方式,支持实时的事件发布/订阅机制。而 Hapi 是一款流行的 Node.js Web 框架,它...

    1 年前
  • Docker Compose 的基础知识

    Docker Compose 是 Docker 官方推出的一个用于定义和运行多个 Docker 容器的工具,它可以让我们轻松地管理和运行多个 Docker 容器,并将它们组合在一起,从而实现具有复杂依...

    1 年前
  • Fastify 应用中如何实现防抖和节流

    在前端开发中,我们经常需要实现防抖和节流这样的性能优化技术来优化用户体验和系统性能。Fastify 是一个快速和低开销的 Web 框架,本文将介绍如何在 Fastify 应用中实现防抖和节流。

    1 年前
  • 从加速计算到流媒体服务:高性能 Rust 的崛起

    Rust 是一种系统级别的编程语言,因其安全、高性能、内存管理直观等特性而备受前端开发人员的青睐。尤其是在需要处理复杂计算和大量数据处理的场景下,Rust 显得尤为重要。

    1 年前
  • 小技巧:使用 LESS 实现 CSS3 网格背景效果

    在现代网页设计中,网格系统已经成为了前端设计中的重要元素。通过同等间隔的水平与垂直线条,网格系统可以使得整个页面看起来更加整齐、高效。而网格背景效果是一种常用的网格系统,可以帮助设计师轻松地制作出不同...

    1 年前
  • Web Components 如何实现单向数据流?

    Web Components 是 Web 技术中相对新的一种编程模型,它允许开发者以组件化的方式构建复杂的应用程序。而单向数据流则是前端技术中常见的一种模式,它可以帮助我们规避很多状态管理方面的常见问...

    1 年前
  • 使用 ES12 中的 Optional Chaining 操作符简化代码

    随着前端技术的不断发展,JavaScript 语言也在不断地更新和完善。ES6、ES7、ES8… 直到目前最新的 ES12,JavaScript 语言的核心功能和语法都得到了不断的完善和改进。

    1 年前
  • ES2020:新特性 BigInt 如何改变 JavaScript 的数值范围?

    在早期的 JavaScript 中,数值类型使用 64 位浮点数表示。这意味着数值的最大值约为 9 * 10^15,而且经常存在精度丢失的问题。然而,随着 JavaScript 的发展,新的数值类型 ...

    1 年前
  • Serverless 应用程序的容器化部署

    背景 随着 Serverless 技术的普及,越来越多的企业和开发者开始尝试使用 Serverless 构建应用程序。开发者可以使用 Serverless 平台将应用程序代码部署到云端,无需购买服务器...

    1 年前
  • CSS Flexbox 布局中实现导航菜单的方法

    什么是 Flexbox 布局? Flexbox 是一种用于布局的 CSS3 属性,它可以让开发者更加方便地设计出复杂的页面布局。相比传统布局,Flexbox 提供了更强大的控制能力,使得布局过程更加简...

    1 年前
  • 解决 Babel 编译 React 项目时无法识别 Import 语句的问题

    在使用 React 进行项目开发时,我们常常会使用 ES6 的语法,而 Babel 是一个流行的编译器,可以将 ES6 语法转换成 ES5 语法,使得我们可以在旧的浏览器或者环境中使用最新的语法特性,...

    1 年前
  • 使用 SASS 实现响应式图片样式的技巧

    在现代的前端开发中,响应式设计已经成为了不可或缺的一部分。与此同时,图片也是页面设计中不可或缺的元素。在 Web 应用程序中,使用响应式图片实现页面自适应排版是至关重要的。

    1 年前
  • Webpack 对 CSS 的处理

    前言 在前端开发中,CSS 是必不可少的一部分。然而,如果我们使用传统的方式,在 HTML 文件中引用 CSS 文件,我们可能会遇到一些问题,比如代码的可维护性和出现命名冲突等。

    1 年前

相关推荐

    暂无文章