熟悉 ES11 中的空值与空值合并,避免 JavaScript Common Pitfalls

介绍

ES11(也称为 ECMAScript 2020)带来了一些新的空值相关操作符,如空值合并运算符和可选链操作符,这些操作符可以帮助我们更容易地处理 JavaScript 中的空值问题并避免常见的陷阱。这篇文章将详细介绍 ES11 中的空值和空值合并,以及如何避免 JavaScript 常见的坑点。

空值概念

在 JavaScript 中,空值有两种类型:null 和 undefined。它们都代表缺少值,但是它们的使用场景略有不同。

  • null 表示一个空对象指针,即该变量指向一个不存在的对象。
  • undefined 表示变量已经声明,但是没有赋值,或者属性不存在。

空值合并运算符

空值合并运算符(??)是 ES11 中引入的新操作符,它可以用来处理 null 或 undefined 的情况。它的语法为 a ?? b,表示如果 a 的值为 null 或 undefined,那么返回 b 的值,否则返回 a 的值。

使用空值合并运算符的好处是可以避免使用通常会出现的代码:

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

这个代码还是比较冗长的,并且存在一些风险。比如在某些情况下,someVar 的值可能是 false,而 false 值通常被认为是一个蓝色的值,如果在这种情况下使用逻辑操作符 ||,那么将会返回默认值,这不是我们希望的结果。

现在我们可以使用空值合并运算符优化这个代码:

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

这将会更简约并且更易于阅读。

可选链操作符

在 ES11 中,我们还可以使用可选链操作符(?.)来避免在访问对未定义或者 null 的值进行调用时抛出 TypeError 异常。而不需要对访问的属性进行检查。这种行为称为在 JavaScript 中的“短路评估”。

下面是一个简单的示例,演示了可选链操作符可以如何安全地访问嵌套对象:

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

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

使用可选链操作符的好处是可以避免在使用访问某些未定义的属性时抛出 TypeError 异常,这是 JavaScript 中非常常见的捕获异常方式。

避免常见的坑点

在 JavaScript 中,可能存在一些常见的坑点,使用空值和空值合并运算符时我们需要注意,以避免这些问题。

一些 JavaScript 中的常见陷阱包括:

  • 布尔运算符将 false 的值视为空值。这意味着如果使用布尔运算符时,false 值将被视为 null 或 undefined,而布尔值 true 使用布尔运算符时,它将被视为非空。
  • 在使用空值合并运算符时,注意当值为 0 或者 "" 时会被视为非空值。
  • 一些对象或数组属性如果是空数组或者空对象,在使用可选链运算符时也会抛出错误。因为属性是已经存在的,但是它们的值为空,这通常是无意中发生的。在使用可选链操作符时,需要检查为空属性的情况。

总结

ES11 中的空值合并运算符和可选链操作符是非常有用的,可使我们的代码更优雅、更简介。但是在使用时需要小心,避免陷入 JavaScript 中的陷阱。使用此操作符可以使代码更加容易维护,也使调试过程更加轻松,可以避免大量的异常和错误的捕捉,在你领略到其魅力与易用性的同时也需时刻记得谨慎使用!

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


猜你喜欢

  • 使用 Jest 测试 Vue 应用程序的实用指南

    使用 Jest 测试 Vue 应用程序的实用指南 前言 随着前端应用程序规模的不断扩大,测试变得越来越重要。在 Vue 应用程序中,Jest 是一种流行的 JavaScript 测试框架之一。

    1 年前
  • 徒手实现 ES8 的 String.prototype.padEnd() 和 String.prototype.padStart() 方法

    在 ES8 中,JavaScript 引入了 String.prototype.padEnd() 和 String.prototype.padStart() 方法,它们可以让我们更方便地将一个字符串填...

    1 年前
  • SequelizeORM 中的连接池配置

    前言 SequelizeORM 是 Node.js 中一种比较流行的 ORM 框架,它可以帮助我们更方便地对数据库进行操作,而其中连接池的配置则对于系统的性能表现有着直接的影响。

    1 年前
  • ESLint 如何检查过度使用的 console.log 语句

    ESLint 如何检查过度使用的 console.log 语句 在 JavaScript 开发中,console.log 是一种常用的调试手段,用于输出变量或信息。

    1 年前
  • RxJS 中 combineLatest 操作符详解

    RxJS 是一个功能强大的 JavaScript 库,它提供了一整套操作符和工具来处理异步数据流。其中,combineLatest 操作符是一个非常有用的操作符,它可以组合多个 observables...

    1 年前
  • 分布式锁实现方案及 Redis 实现

    概述 在分布式系统中,多个进程或服务需要对共享的资源进行操作,为了保证数据的一致性和完整性,需要实现分布式锁。分布式锁的实现可以使用不同的方案,本文将介绍其中一种基于 Redis 的分布式锁实现方案。

    1 年前
  • 如何使用 SASS 进行快速 UI 设计

    在现代的 web 开发中,UI 设计已经扮演了越来越重要的角色。使用 CSS 来实现复杂的 UI 设计一直是一个挑战,但是我们可以使用 SASS 来更加高效地管理和设计我们的样式。

    1 年前
  • Tailwind CSS 中常见的调试技巧

    Tailwind CSS 是一个非常流行的前端框架,可以帮助开发者快速构建现代化的网站和应用程序。虽然使用 Tailwind CSS 极其简单,但在编码过程中还是会遇到一些问题,例如样式不生效、排版出...

    1 年前
  • Next.js 中如何使用 Apollo Client?

    介绍 Next.js 是一款由 Vercel 开发的 React 应用程序的轻量级框架。它简化了开发过程,并提供了一些内置功能,如服务器渲染和静态导出等。而 Apollo Client 是一款流行的 ...

    1 年前
  • Dockerfile 容器化部署 Vue 应用

    Dockerfile 容器化部署 Vue 应用 Docker 是一种容器化技术,通过将应用程序打包成独立的容器,使其能够在任何地方运行,并且能够更快更简单地进行部署和管理。

    1 年前
  • 使用 Mongoose 实现自动化回传测试结果

    Mongoose 是 Node.js 的一个异步对象模型和管理工具,它提供了一种优雅的方式来管理 MongoDB 数据库。在前端开发中,我们会经常需要对后端的接口进行测试,并且需要将测试结果自动回传回...

    1 年前
  • ECMAScript 2021 (ES12) 中如何使用 Object.entries 和 Object.fromEntries 快速转换数据

    随着前端技术的不断发展,JavaScript 语言的标准也在不断更新。ECMAScript 2021(也叫 ES12)是最新的 JavaScript 标准,它引入了一些新的语言特性。

    1 年前
  • Socket.io 如何实现广播消息

    Socket.io 是一个实时通信的库,提供了 WebSocket 协议的兼容性,可以用于在客户端和服务器之间建立实时双向连接。在前端开发中,Socket.io 是一个非常常见的工具,可以用于实现类似...

    1 年前
  • 解析 ES10 中的可选链 (Optional Chain) 及使用方式

    可选链 (Optional Chain) 是 ES10 引入的一种新特性,它主要是为了解决在访问深层次嵌套的对象时,出现属性不存在而导致程序抛出异常的问题。本篇文章将详细介绍可选链的语法、使用方式和注...

    1 年前
  • Kubernetes 中的 Dashboard 使用详解

    随着云计算技术的不断发展,Kubernetes 已成为现代云计算环境下最重要的容器编排平台之一。Kubernetes Dashboard 是一个非常实用的工具,它提供了用户友好的图形界面,方便用户对 ...

    1 年前
  • PWA 仅缓存关键资源的低延迟策略实现

    前言 PWA,即 Progressive Web App,是一种新型的 Web 应用开发模式,它结合了 Web 应用和原生应用的优点,并能够实现离线访问、推送通知等功能,用户体验类似于原生应用。

    1 年前
  • AngularJS 中的 “10 $digest iterations reached” 问题:如何解决?

    什么是 $digest iterations reached 问题? 在使用 AngularJS 进行开发时,你可能会遇到这个错误:10 $digest iterations reached. Abo...

    1 年前
  • Android 无障碍模式中的文本编辑技巧

    随着科技的不断发展,无障碍模式被越来越多人所重视和使用。无障碍模式提供了一种更加易于操作的方式,帮助人们解决在使用设备和应用时遇到的各种障碍。而在 Android 系统中,无障碍模式也得到了广泛应用。

    1 年前
  • 如何使用 Fastify 实现服务器端渲染 (SSR)

    在前端开发中,服务器端渲染 (Server-Side Rendering, SSR) 是目前较为流行的一种技术方案。它能够在服务器端将数据渲染成 HTML,然后再将 HTML 返回给客户端,从而加快页...

    1 年前
  • Promise 在 Express.js 框架中的应用实例分享

    Promise 在 Express.js 框架中的应用实例分享 前端开发的世界变化非常迅速,随着业务逻辑越来越复杂,异步编程已经成为不可避免的一部分,而 Promise 正好能在一定程度上解决这个问题...

    1 年前

相关推荐

    暂无文章