ES12 中的相等比较运算符:Object.is()、Object.isnt() 和 ??= 运算符

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

在 JavaScript 中,相等比较运算符是我们经常使用的语法之一。在 ES12 中,新增了两个相等比较运算符:Object.is() 和 Object.isnt(),并且还有一个新的赋值运算符:??=。本文将详细介绍这三个运算符的使用方法和指导意义。

Object.is()

Object.is() 是 ES12 中新增的一个用于比较两个值是否相等的方法。与原有的比较运算符(== 和 ===)不同,Object.is() 能够正确地处理一些特殊情况,比如 NaN 和 -0。

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

可以看到,使用 Object.is() 进行比较时,NaN 与 NaN 是相等的,-0 与 0 是不相等的。这些结果与原有的比较运算符不同,因为原有的比较运算符在处理这些特殊情况时会出现问题。

在实际开发中,我们经常会遇到需要比较两个值是否相等的场景,而 Object.is() 能够正确地处理各种情况,因此建议在使用比较运算符时,优先考虑使用 Object.is()。

Object.isnt()

Object.isnt() 是 Object.is() 的反向操作。它用于比较两个值是否不相等。与 Object.is() 类似,Object.isnt() 也能够正确地处理一些特殊情况。

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

可以看到,使用 Object.isnt() 进行比较时,NaN 与 NaN 是不相等的,-0 与 0 是相等的。这些结果与原有的比较运算符不同,因为原有的比较运算符在处理这些特殊情况时会出现问题。

在实际开发中,我们也经常会遇到需要比较两个值是否不相等的场景,因此 Object.isnt() 也是一个非常有用的方法。

??= 运算符

??= 运算符是 ES12 中新增的一个赋值运算符。它用于给一个变量赋值,但只有当该变量的值为 null 或 undefined 时才执行赋值操作。

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

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

可以看到,当变量 a 的值为 null 时,??= 运算符会将 'default' 赋值给 a;当变量 b 的值不为 null 时,??= 运算符不会执行赋值操作。

在实际开发中,我们经常会遇到需要给变量赋默认值的场景。使用 ??= 运算符可以让代码更加简洁明了。

总结

ES12 中新增的相等比较运算符 Object.is() 和 Object.isnt() 能够正确地处理一些特殊情况,建议在使用比较运算符时,优先考虑使用它们。而 ??= 运算符则能够让代码更加简洁明了,特别是在需要给变量赋默认值的场景中非常有用。

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


猜你喜欢

  • Jest 测试中遇到的异步测试应该如何处理

    前言 在前端开发中,测试是非常重要的一环。而 Jest 是一款非常优秀的前端测试框架,它提供了非常多的功能和工具,方便我们进行测试。但是在测试过程中,我们经常会遇到异步测试的情况,这时候我们就需要对 ...

    7 个月前
  • MongoDB 集合的 CURD 操作详解

    前言 MongoDB 是一种非关系型数据库,它以文档为中心,而不是以表为中心。在 MongoDB 中,文档是指一组键值对,类似于关系型数据库中的行。集合是一组文档,类似于关系型数据库中的表。

    7 个月前
  • 解决 Fastify 打印大对象报错问题

    在使用 Fastify 进行后端开发时,我们可能会遇到打印大对象时出现报错的情况。这是因为 Fastify 默认情况下限制了请求和响应的大小,超过限制时会出现错误。

    7 个月前
  • 利用 Webpack 优化大型 SPA 性能实战

    前言 随着前端技术的飞速发展,越来越多的网站和应用采用了单页应用(SPA)的架构,以提供更好的用户体验。然而,随着应用规模的增长,SPA 的性能问题也逐渐浮现。Webpack 作为前端构建工具的佼佼者...

    7 个月前
  • ES12 中增强的正则表达式:新功能和语法改进

    正则表达式是前端开发中非常重要的一部分,它可以帮助我们快速有效地处理字符串。在 ES12 中,正则表达式得到了一些增强,包括新的功能和语法改进。在本文中,我们将深入探讨这些增强,并提供一些示例代码来帮...

    7 个月前
  • Node.js 调用 HTTP 服务时的出错排查方法

    在前端开发中,我们经常需要使用 Node.js 来调用 HTTP 服务。然而,当我们在调用 HTTP 服务时遇到错误时,该怎么办呢?本文将介绍一些常见的错误以及如何排查和解决这些错误。

    7 个月前
  • Docker Compose 中多个服务的容器命名指南及最佳实践

    前言 在使用 Docker Compose 来构建多个服务的应用时,为了方便管理和识别,我们需要对容器进行命名。而在多个服务的情况下,容器命名就显得尤为重要。 本文将介绍 Docker Compose...

    7 个月前
  • Server-sent Events 的优势与适用场景

    在 Web 应用程序中,经常需要实时更新数据或推送通知给用户。为了实现这个功能,过去我们通常使用轮询或者 WebSocket 技术。但是,这些技术都有一些缺点,例如轮询会浪费大量的带宽和服务器资源,而...

    7 个月前
  • ES8 算法题 - 异步数字计数器

    在前端开发中,异步编程是必不可少的一部分。ES8 中引入了 async/await 语法,使得异步编程更加简洁明了。本文将通过一个实例来介绍如何使用异步编程实现一个数字计数器。

    7 个月前
  • 使用 GraphQL 和 Firebase 实现身份验证和数据库同步

    在现代 Web 开发中,身份验证和数据库同步是非常常见的需求。传统的方式是使用 RESTful API 和数据库,但是这种方式存在一些问题,如 API 设计复杂、接口数量庞大、数据结构不一致等。

    7 个月前
  • RxJS 中操作符 buffer 和 bufferTime 的使用与实例分析

    RxJS 是一个流式编程库,它提供了许多操作符来帮助我们处理数据流。其中,buffer 和 bufferTime 操作符可以帮助我们将数据流转换为缓冲区,以便我们在一定条件下对缓冲区中的数据进行操作。

    7 个月前
  • Chai 测试库中断言函数存在的正确写法

    在前端开发中,测试是非常重要的一环,能够有效保证代码的质量和稳定性。Chai 是一个流行的 JavaScript 测试库,它提供了许多方便的断言函数来测试代码的正确性。

    7 个月前
  • Enzyme 测试组件时如何模拟 localStorage 的值

    Enzyme 测试组件时如何模拟 localStorage 的值 在前端开发中,我们经常需要测试 React 组件的功能。而在测试过程中,有时需要模拟 localStorage 的值,以测试组件在不同...

    7 个月前
  • 如何使用 Cypress 测试 GraphQL 应用

    前言 Cypress 是一个现代化的前端自动化测试工具,它的特点是易于安装和使用,而且有着极佳的可读性和可维护性。本文将介绍如何使用 Cypress 测试 GraphQL 应用,希望能帮助读者更好地了...

    7 个月前
  • 如何利用 Headless CMS 构建网站地图?

    前言 在建设网站的过程中,网站地图是一项非常重要的工作。一个好的网站地图可以让用户更好地了解网站的结构,同时也可以提高搜索引擎的索引效率。在使用 Headless CMS 时,如何构建网站地图也是一个...

    7 个月前
  • ECMAScript 2019 中的 Private Class Fields:更好的封装,更安全的代码!

    ECMAScript 2019 中的 Private Class Fields:更好的封装,更安全的代码! 在前端开发中,代码的封装和安全性一直是我们关注的重点。而在 ECMAScript 2019 ...

    7 个月前
  • Next.js+Socket 实现聊天应用

    本文将介绍如何使用 Next.js 和 Socket 实现实时聊天应用。在本文中,我们将学习如何使用 Next.js 和 Socket 进行前端开发,如何使用 Socket 进行实时通信,以及如何在 ...

    7 个月前
  • 利用 SASS 快速编写响应式布局

    随着移动设备的普及和不同尺寸屏幕的出现,响应式布局已经成为了前端开发中不可或缺的一个环节。为了更加高效地开发响应式布局,我们可以使用 SASS 这个强大的 CSS 预处理器。

    7 个月前
  • React 遇到的前后端集成问题及解决方案

    React 是一款流行的前端框架,它提供了一套完整的组件化开发模式,可以快速构建复杂的前端应用。但在实际开发中,前后端集成问题常常会给开发人员带来困扰。本文将介绍 React 遇到的前后端集成问题及解...

    7 个月前
  • 如何将已有 CSS 应用到 Tailwind 项目中

    Tailwind 是一种快速构建用户界面的 CSS 框架,它提供了一组可重用的 CSS 类,可以大幅度减少编写 CSS 代码的时间。但是,如果您已经有了一些自定义的 CSS 样式,您可能会想知道如何将...

    7 个月前

相关推荐

    暂无文章