ES11 (2020) 中的 nullish 合并运算符:如何更好地与 typeof 运算符配合使用?

在 ES11 (2020) 中,新增了一个 nullish 合并运算符(nullish coalescing operator)。 该运算符使用两个问号(??)表示,可以轻松地处理 null 或 undefined 值。

常规运算符和问题

在 JavaScript 中,常规的逻辑运算符有并且(&&)和或者(||)。 但是和这两个运算符搭配使用时会有一些问题。

如果一个变量的值为 falsy 值(如空字符串、null、undefined),使用 || 运算符时,会将变量的值转换为 false,进而使用运算符左边的值。 同样地,如果使用 && 运算符时,变量的值也会被转换为 false。但是,在这种情况下会使用运算符右边的值。

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

对于以上的运算符组合,如果变量的值为 0、空字符串或者空数组时,也同样存在问题。

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

以上代码中,0 被转换为 false,因此 a 的值为 10; '' 被转换为 false,因此 b 的值为 ''; [] 被视为 truthy 值,最终变量 c 的值为 []。

nullish 合并运算符的作用

在 ES11 中,为了解决以上问题,引入了 nullish 合并运算符。 nullish 合并运算符只在变量值为 null 或 undefined 时返回右侧的值,其他情况返回左侧的值。

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

对于 null 或 undefined 的变量值,无论左侧使用何种运算符,都会返回右侧的值。这样就能够正确地处理空值,避免了上述的问题。

typeof 运算符和 nullish 合并运算符的配合使用

在计算变量值时,需要知道变量的类型。 这种情况下,使用 typeof 运算符可以获得变量的类型信息。

在使用 nullish 合并运算符时,需要特别注意使用 typeof 运算符进行判断,以避免类型错误。

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

在上述代码中,obj 对象没有 age 属性。如果使用 obj.age,将会报错。 在此处使用 ?. 运算符,代表如果对象存在 age 属性,就返回该属性值;如果不存在,就忽略该属性。 结果得到 undefined 值,这时就需要使用 nullish 合并运算符,使用默认值 'unknown'。

在使用 typeof 运算符判断类型时,需要注意:

  • typeof null 的值为 'object',是一种特殊情况。
  • 在 JavaScript 中,NaN 类型可以被视为 number 类型,需要特别处理。
  • 在其他语言(如 TypeScript)中,也需要注意 null 和 undefined 类型的区别。
--- --- - ----
--- - - ------ --- --- -------- -- ----------- - --- - -- -- -

在上述代码中,判断 num 是否为 number 类型,并且 num 不是 NaN 值。如果符合条件,将 num 的值赋给 x,否则使用默认值 0。

总结

nullish 合并运算符能够避免常规运算符的问题,处理 null 和 undefined 值; 使用 typeof 运算符能够得到变量的类型信息,可以和 nullish 合并运算符搭配使用; 注意 null 和 undefined 类型的区别,避免类型错误。 如此使用 nullish 合并运算符将变得更加简单和有效。

示例代码:

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

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

上述代码中,使用了 nullish 合并运算符和 typeof 运算符,能够正确地处理变量值和类型信息。

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


猜你喜欢

  • 基于 AngularJS 的前端单页面应用开发实战

    前言 前端开发技术日新月异,一些新的技术、工具和框架层出不穷。AngularJS 是其中一个相对成熟的前端框架。它是由 Google 开发和维护的一款 JavaScript 框架,用于开发富客户端的 ...

    1 年前
  • RxJS 操作符详解之重点操作符

    前言 RxJS 是一个非常重要的前端类库,它是一个响应式编程的库,可以大幅度提高前端代码的可读性和可维护性。在 RxJS 中,操作符是非常重要的一部分。 在本文中,我们将详细介绍 RxJS 中一些重点...

    1 年前
  • 如何应对 Serverless Lambda 运行时间限制问题

    Serverless 架构已经成为现代云计算的主流之一,特别是在 Amazon Web Services (AWS)中,Serverless Lambda 服务得到了广泛的应用。

    1 年前
  • 在 Express.js 中如何处理 JSON 数据?

    JSON(JavaScript Object Notation)是当今最流行的数据交换格式之一。在 Web 开发中,大量的前后端数据交换均采用 JSON 格式。因此,对于前端工程师来说,掌握在 Exp...

    1 年前
  • ECMAScript 2017 中的 IteratorResult 对象:更好的迭代控制

    ECMAScript 2017 中的 IteratorResult 对象:更好的迭代控制 在 JavaScript 中,迭代器是一种支持按顺序访问集合中所有元素的接口,通过 for...of 循环可以...

    1 年前
  • 在 Jest 测试中同时测试多个组件的最佳实践

    在前端开发中,自动化测试已经成为了必备的开发工具之一。Jest 是一个非常流行的 JavaScript 测试框架,其提供了很多强大的功能,比如可以用来测试 React 组件。

    1 年前
  • 在使用 Chai 进行异步测试时遇到的错误及解决方式

    在使用 Chai 进行异步测试时遇到的错误及解决方式 Chai 是一个流行的 JavaScript 断言库,广泛应用于前端开发的单元测试中。在使用 Chai 进行异步测试时,经常会遇到一些错误,这篇文...

    1 年前
  • 如何在 PM2 中实现 Node.js 应用程序的零停机部署

    随着 Node.js 的广泛应用,越来越多的开发者开始使用 PM2(一个 Node.js 进程管理器)来管理和监控 Node.js 应用程序的运行。PM2 提供了许多功能,其中一个非常有用的功能是“零...

    1 年前
  • 聊一聊 ES6 中的模块系统:import 和 export

    ES6 的模块系统是一种新的 JavaScript 的模块化加载方案,它主要通过 import 和 export 两个关键字实现模块间的加载和导出。 import import 是 ES6 中的一个关...

    1 年前
  • 如何在 Kubernetes 中实现负载均衡?

    前言 在云原生发展的背景下,Kubernetes 成为了最受欢迎的容器编排工具之一,被广泛应用于企业级的应用部署和管理。在应用部署过程中,高可用性和可伸缩性是不可或缺的。

    1 年前
  • Redux 中处理组件间状态同步的问题

    前言 在前端开发中,我们会遇到大量使用组件的情况。一个组件具有自己的状态,这在大多数情况下是非常好的,因为可以避免状态污染,但是在一些情况下,组件之间需要共享某些状态。

    1 年前
  • Node.js+Express+Vue.js 的前端开发实战(完美解决大型 SPA 维护难题)

    前端开发在过去几年中经历了一次翻天覆地的变化,从简单的 HTML、CSS、JavaScript 页面,到现在的前端框架化开发。其中,Node.js 和 Vue.js 是目前非常流行的前端技术。

    1 年前
  • CSS Reset 的正确使用方法,让你少走弯路

    在开发前端网页时,我们通常会使用样式表来控制网页的外观和样式。但是,不同的浏览器在对网页样式的渲染上存在一些差异,这就导致了一些网页在不同浏览器上的展示效果不一致。

    1 年前
  • 如何使用 Next.js 实现免登录、免权限鉴定访问?

    在开发 Web 应用时,鉴定用户登录状态和权限是必不可少的功能。然而,在某些场合下,我们需要让用户不必登录或授权就能够访问某些特定页面或资源。比如,我们可能需要实现一个托管在公司内网中的应用,只有公司...

    1 年前
  • 在 Angular 中使用 Websocket 实时通信

    简介 Angular 作为一款流行的前端开发框架,经常用于开发单页应用程序。而在一些场景下,需要实现实时通信的功能,在这种情况下,Websocket 是一种非常好的选择。

    1 年前
  • 使用 Node.js 和 NPM 进行包管理

    Node.js 是一种开源 JavaScript 运行环境,它能够在服务器运行 JavaScript 代码。随着前端开发的进步,Node.js 成为了前端技术栈中不可缺少的一环。

    1 年前
  • 如何在 Fastify 中使用 Sessions

    在现代的 Web 应用程序中,会话 (session) 是非常重要的一部分,它允许用户在同一时间内进行多次请求时保持其身份认证状态。Fastify 是一个快速而又低开销的 Web 应用程序框架,提供了...

    1 年前
  • CSS Grid 布局预览:容器居中、子项对齐,还有更多!

    CSS Grid 布局是一种相对较新的布局方式,它能够有效地帮助前端开发人员构建复杂的网格布局,同时还提供了灵活的对齐方式。在这篇文章中,我们将会介绍 CSS Grid 布局的一些基本概念,以及如何实...

    1 年前
  • 制作双栏布局的常用 LESS 技巧

    制作双栏布局的常用 LESS 技巧 在现代网页设计中,使用双栏布局可以为用户提供更好的阅读体验和视觉效果。在前端开发中,使用 LESS 可以更方便地编写 CSS 样式,下面将介绍几种常用的 LESS ...

    1 年前
  • Mongoose:深入理解 subdocument 处理

    在开发 Web 应用程序时,MongoDB 是一个非常流行的数据库,而Mongoose 是一个 Node.js 的 ORM 模块,用于简化与 MongoDB 的交互。

    1 年前

相关推荐

    暂无文章