又见空值合并运算符:ECMAScript 2020 中的 null 连接

又见空值合并运算符:ECMAScript 2020 中的 null 连接

在 ECMAScript 2020 中,我们迎来了一个新的空值合并运算符——null 连接(nullish coalescing operator)。该运算符以 ?? 表示,可以在判断空值时提供更加简洁并易于理解的写法。

在了解 null 连接之前,我们先来看下普通的或运算符(||)如何判断空值。通常我们会这样写:

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

上面的代码中,|| 运算符会对两个值进行判断,只要其中有一个是 true 就返回该值。在这里,null 被认为是 falsy 值,所以返回了字符串 "bar"。

但是,如果我们使用 || 运算符时遇到的是 falsy 值而非 null,就会发生意料之外的结果:

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

可以看到,当左操作数是 falsy 值时,|| 运算符并不会判断左侧的值是否为 null,而是返回左侧值。这导致代码逻辑不仅不严谨,还容易引发难以察觉的 bug。

为了解决这个问题,null 连接应运而生。当使用 null 连接时,我们只会考虑操作数是否为 null 或 undefined。其规则如下:

  • 如果左操作数为 null 或 undefined,则返回右操作数;
  • 如果左操作数不为 null 或 undefined,则返回左操作数。

因此,在使用 null 连接时,我们就能够更加精确地判断空值。下面是一个示例代码:

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

上面的代码中,foo 的值为右侧的 'bar',因为左侧为 null;baz 的值为左侧的 '',因为左侧不是 null 或 undefined。

null 连接不仅在判断空值时非常有用,还能在多个变量赋值时使用。下面是一个示例代码:

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

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

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

上面的代码中,我们使用解构赋值将 settings 对象的值赋给多个变量。如果 settings 对象中的值是 null 或 undefined,就会使用我们提供的默认值。这个方法不仅简洁,还能够有效地避免因变量为 falsy 值而引发的 bug。

总结

null 连接是 ECMAScript 2020 中新增的一个空值合并运算符,其可以更加准确地判断空值,有效避免变量是 falsy 值时引发的 bug。在实际编写代码时,我们可以使用 null 连接来简化代码并提高开发效率。

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


猜你喜欢

  • RxJS 的实用操作符 ——debounceTime,throttleTime,distinctUntilChanged

    RxJS 的实用操作符—— debounceTime,throttleTime,distinctUntilChanged 一、RxJS 概述 RxJS 是 ReactiveX 框架的 JavaScri...

    1 年前
  • Socket.io 实现在线多人游戏开发要点

    Socket.io 是一个为实时应用设计的 JavaScript 库,主要用于在客户端和服务器之间建立双向通信。在多人游戏开发中,Socket.io 能够实现游戏双方之间的实时通信,使游戏更加流畅,用...

    1 年前
  • 利用 ES8 中的 Object.getOwnPropertyDescriptors() 处理对象属性拷贝

    前言 在前端开发中,我们经常需要处理对象的属性拷贝。然而,在 JavaScript 中,对象的属性拷贝并不像我们期望的那样简单。在 ES5 中,我们可以利用 Object.defineProperty...

    1 年前
  • Babel-preset-stage-2 的使用指南

    随着 Javascript 的不断发展,每年都会有新的 ECMAScript 标准版本发布。然而,浏览器的兼容性和 Node.js 等环境的支持程度并没有同步提高。

    1 年前
  • 在 Node.js 中使用 Chai.js 测试异步/同步代码

    随着前端技术的不断发展,测试也变得越来越重要。在开发过程中,我们需要保证代码是可靠的,能够正确地工作。为了达到这个目的,我们可以使用各种测试框架和工具,其中 Chai.js 就是一个非常有用的工具。

    1 年前
  • MongoDB 分布式事务方案的探讨

    MongoDB 是一种文档数据库,具有高可用和可扩展性特点。随着互联网应用的普及,分布式系统的需求也越来越强烈。在分布式系统中,事务处理是一项必不可少的技术。MongoDB 从版本 4.0 开始加入支...

    1 年前
  • Node.js 中 cookie 和 session 的区别和使用技巧

    Node.js 中 cookie 和 session 的区别和使用技巧 在前端开发中,我们经常会使用 cookie 和 session 来储存用户的信息,以便使用者下一次来访问时,我们可以在后端服务器...

    1 年前
  • 使用 Express.js 和 React 构建单页应用

    单页应用(SPA)已成为当今 Web 开发中的常见实践。它的主要特点是减少页面的刷新,提高用户体验。前端技术的发展让 SPA 的技术栈变得更加多样,其中以 React 为代表的前端框架成为了很多开发者...

    1 年前
  • 如何利用无障碍技术提高游戏的可玩性

    引言 随着互联网技术的发展,游戏在人们生活中扮演了越来越重要的角色。但是,对于一些身体或者智力方面存在一些限制的玩家,游戏的可玩性会受到一定的限制。这时,我们就需要运用无障碍技术来提高游戏的可玩性,让...

    1 年前
  • 如何使用 TypeScript 提高项目的类型安全性

    如何使用 TypeScript 提高项目的类型安全性 前言 在前端开发中,JavaScript 是一门动态类型语言,这意味着变量的类型在运行时才会被确定。这种灵活的特性让开发变得容易,但也增加了一些潜...

    1 年前
  • 在 Next.js 项目中使用 Supabase 的完整指南

    在 Next.js 项目中使用 Supabase 的完整指南 Supabase 是一个开源的后台服务,它提供了一系列数据库和身份验证功能,可以帮助开发者快速搭建应用。

    1 年前
  • 解决 React Native 应用中的布局问题

    React Native 是一种流行的跨平台移动应用开发框架。和 React 类似,React Native 也采用了组件化的开发模式,但是与 React 不同的是,React Native 是通过 ...

    1 年前
  • SASS 中使用 CSS media queries 的方法

    在前端开发中,响应式设计是非常重要的,因为现在大多数用户都会使用各种设备来访问网站,比如手机、平板、台式机等等。因此,我们需要编写能够适应不同屏幕尺寸的样式。而使用 CSS media queries...

    1 年前
  • AngularJS 单页应用 SEO 优化实践

    随着单页应用(SPA)的流行,越来越多的网站已经采用了 AngularJS 这样的前端框架来构建其 SPA。然而,SPA 对搜索引擎优化(SEO)方面的支持存在挑战,因为搜索引擎爬虫通常只能获取静态 ...

    1 年前
  • 学习 ES11:ECMAScript 2020 中的块级作用域变量声明 let/const

    在早期 JavaScript 中,变量声明只有 var 这一种方式,在全局作用域和函数作用域中都可以使用。然而,由于变量的提升机制,导致一些不可预料的问题,比如重复声明变量或变量的声明与使用不在同一个...

    1 年前
  • ESLint 在 Node.js 项目中的优化实践

    ESLint 是一个广泛使用的 JavaScript 静态代码分析工具,它能够帮助我们在编码过程中尽早地发现代码问题,提高代码质量。在 Node.js 项目中使用 ESLint 可以帮助我们检测代码规...

    1 年前
  • 利用 Docker 构建 CI/CD 流水线,从容器化构建到应用编译部署全过程学习

    随着互联网的不断发展,传统的 SDLC(软件开发生命周期)已经不能满足现代项目的需求,CI(持续集成)和CD(持续交付/部署)成为了现代项目开发的标配。而 Docker 作为一个流行的容器化解决方案,...

    1 年前
  • Kubernetes 中容器运行日志处理方案

    在 Kubernetes 集群中,容器是运行在 Pod 中的基本单位。Kubernetes 提供了多种机制来收集和处理容器的运行日志,这对于维护应用的健康状态和排除问题非常重要。

    1 年前
  • Custom Elements 中自定义事件的注册及触发方法

    在 Web 开发过程中,为了让页面更加交互和响应用户的操作,往往需要使用 JavaScript 来注册和触发事件。在 Custom Elements 中,我们可以通过自定义事件来让组件与外部的代码进行...

    1 年前
  • ES9(ECMAScript 2018)中的正则表达式 named capture groups

    正则表达式是前端开发中不可或缺的工具之一。在 ECMAScript 2018 中,引入了一项新的特性——“命名捕获组(named capture groups)”,在处理正则表达式匹配时可以大大提高代...

    1 年前

相关推荐

    暂无文章