为什么在 ES11 中使用 optional chaining 和 nullish 合并可能会产生问题?

前言

JavaScript 是一门灵活的动态语言,但也因此存在许多潜在的陷阱。在开发中我们经常会使用一些语法糖来解决实际问题,比如 optional chaining 和 nullish 合并。这两个新特性都是由 ES11 引入的,它们使得代码变得更加简洁易读,同时也提高了代码的可靠性。但是,我们在使用 optional chaining 和 nullish 合并时,也需要注意潜在的问题。

本文将深入讲解 optional chaining 和 nullish 合并的使用,为读者提供更深入的了解和指导。

optional chaining

在 JavaScript 中,我们经常需要访问对象的属性和方法。但是,有些属性或方法是可选的,可能不存在。我们通常会使用 if 语句或三元运算符来检查属性或方法是否存在,这样做非常繁琐。

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

在 ES11 中引入了 optional chaining 语法,它可以简化我们的代码。下面是一个简单的示例:

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

这段代码等同于:

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

nullish 合并

在 JavaScript 中,当变量的值为 null 或 undefined 时会引发错误。为了防止这种错误发生,我们经常需要对变量的值进行检查。

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

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

在这个例子中,我们使用 || 运算符来设置默认值。如果 foo 的值为 null 或 undefined,则使用默认值 'default'。

但是,当变量的值为 false、0 或空字符串时,这种方法会产生问题。在这种情况下,bar 会等于默认值,而不是变量的实际值。

在 ES11 中引入了 nullish 合并运算符 ??,它可以避免这种问题的发生。

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

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

在这个例子中,bar 的值是 null,而不是默认值 'default'。

问题产生的原因

optional chaining 和 nullish 合并虽然是非常有用的特性,但它们也会引发一些问题,尤其是在将它们组合使用时。

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

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

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

在这个例子中,value 的值是 null,而不是 undefined。这个问题是由 optional chaining 引起的,因为它会返回 undefined,然后被 ?? 运算符转换为 null。这很容易让人感到困惑,因为我们可能会期望 value 的值为 undefined。

解决问题的方法

为了避免 optional chaining 和 nullish 合并可能产生的问题,我们可以使用常规的条件语句来检查变量的值。

--- ------

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

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

在这个示例中,我们使用 if 语句来检查 obj.a 和 obj.b 的值是否存在。如果存在,则将其值赋给变量 value。否则,value 的值为 undefined。

结论

在实际开发中,我们需要根据具体的情况来选择 optional chaining 和 nullish 合并这两种语法糖。在处理复杂的嵌套对象时,它们可以减少代码的复杂度,同时提高代码的可读性和可维护性。但是,在将它们组合使用时,我们需要小心问题的产生,不妨使用常规的检查方法来避免可能产生的问题。

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


猜你喜欢

  • 如何使用 Hapi 和 AngularJS 进行服务器端呈现

    在现代 Web 应用程序开发中,服务器端呈现是一个非常重要的概念。通过服务器端呈现,可以将服务器端生成的内容与客户端生成的内容有机地结合在一起,从而提供功能强大且快速响应的用户体验。

    2 个月前
  • 在 GraphQL 中使用 Dgraph 作为数据库

    GraphQL 是一个快速发展的数据查询语言和API标准,而 Dgraph 是一个快速,分布式的图形数据库,它可以用来处理查询性能优化更高的 GraphQL API。

    2 个月前
  • 如何使用 Babel 来优化 Javascript 应用性能

    Javascript 前端开发在今天已经变得如此普遍,以至于许多普通的网站都会包含大量的脚本代码。但随着应用程序变得越来越复杂,脚本文件的大小、复杂性和可读性也越来越大。

    2 个月前
  • 如何使用 Chai 测试 Webpack Bundle

    Chai 是一个用于 JavaScript 测试的断言库,它可以与 Mocha 等测试框架一起使用,为前端开发人员提供了强大的测试支持。在 Webpack 中,我们可以使用 Chai 来测试打包后的 ...

    2 个月前
  • Sequelize 如何定义数据验证?

    在使用 Sequelize 进行 Node.js 应用程序开发时,如何定义数据验证是一个非常重要的问题。 数据在系统中的重要性不言而喻。为了维护数据的准确性和完整性,定义数据验证是必要的。

    2 个月前
  • 提升 Vue 工程 CLI 应用性能

    Vue.js 是现今最流行的前端框架之一,其 CLI 工具是构建 Vue 应用的首选方案。然而,在搭建大型复杂 Vue 工程时,开发者往往会遇到性能瓶颈和调优难题。

    2 个月前
  • Enzyme 测试 React 组件中的 childContext

    在 React 应用程序开发中,childContext 是一种可以在组件层级中传递数据的方法。当某个组件需要向它的所有子组件传递数据时,childContext 是最实用的方案之一。

    2 个月前
  • Serverless 应用中的文件存储和管理技巧

    Serverless 是一种不需要关注服务器配置和管理的云服务架构,可以节省开发者和企业在服务器管理和维护方面的成本和时间,使得开发者和企业能够更加专注于业务实现。

    2 个月前
  • 如何使用 LESS 中的 calc 函数进行数学运算

    在编写前端页面的过程中,经常需要进行数字运算。LESS 的 calc 函数,能够帮助我们在样式表中使用类似于 CSS3 中 calc 的数学计算功能,是前端开发中很方便的技巧。

    2 个月前
  • PM2 进程卡死问题解决方案

    随着 Web 应用规模越来越大,同时前端开发工作也越来越复杂,在开发过程中我们常常需要使用第三方工具来辅助我们进行开发。PM2 是一个优秀的进程管理器,可以在 Node.js 运行时管理进程、监控进程...

    2 个月前
  • 在 ES9 中使用异步生成器精简代码

    随着前端应用的复杂度不断提升,异步编程已经成为了必不可少的技术。在最新的 ECMAScript 规范中,ES9(也就是 ECMAScript 2018)引入了异步生成器的概念,为我们更加方便地处理异步...

    2 个月前
  • AngularJS 和 Socket.io 实现前端推送功能

    在现代 Web 应用中,常常需要实时更新数据来增强用户体验。为了使实时数据交互更加可靠、高效,我们可以使用 Socket.io 技术实现前端推送功能。在本文中,将详细了解 AngularJS 和 So...

    2 个月前
  • 如何使用 Mocha 测试 AngularJS 应用程序

    AngularJS 是一个流行的前端框架,它提供了强大的工具和框架来构建丰富的 Web 应用程序。然而,对于前端开发人员来说,编写正确的、健壮的和高效的代码非常重要。

    2 个月前
  • 如何使用 CSS Reset 处理字体缩放问题

    在网页开发中,我们经常会遇到浏览器字体缩放的问题,不同浏览器缩放的比例也是不一样的。为了解决这个问题,我们可以使用 CSS Reset 进行缩放统一处理,接下来我们就一起来学习一下如何使用 CSS R...

    2 个月前
  • “未安装情况下” 如何打开 PWA 链接?

    随着移动互联网时代的到来,PWA(Progressive Web App)已经成为了前端开发的热门技术之一。但是,在使用 PWA 过程中,有时会遇到一种情况:当用户未安装该 PWA 应用时,如何打开相...

    2 个月前
  • 结合 Babel 和 Webpack 如何提高前端项目的性能

    在前端开发中,Babel 和 Webpack 都是非常重要的工具。Babel 可以将 ES6+ 代码转换为兼容性更好的 ES5 代码,而 Webpack 则可以将多个模块打包成一个或多个文件,并且可以...

    2 个月前
  • 高可访问性网站设计指南:无障碍视频

    引言 随着近年来关于网络无障碍(Web Accessibility)的逐渐普及,越来越多的网站开始关注其网站的无障碍性能。然而,关于无障碍视频的开发却很少被讨论。本文将介绍一些用于开发高可访问性视频的...

    2 个月前
  • Fastify 框架中集成 GraphQL API 接口

    前言 GraphQL 是一种新型的 API 设计语言,它是由 Facebook 开发的一款数据查询和操作语言,可以用于所有编程语言并可在各种类型的应用中使用。Fastify 是一个高度专注于性能的 N...

    2 个月前
  • 响应式设计中的跨移动终端适配技巧

    响应式设计是一种设计方法,它可以使网站或应用程序能够在多个移动设备上实现完美的可视化效果,并且可以更好地适应用户的浏览器窗口大小。然而,为了实现这一点,我们有时需要使用一些技巧来确保网站或应用程序在多...

    2 个月前
  • Serverless 应用的灰度发布和回滚策略

    在云计算时代,Serverless 架构已经成为前端开发中非常流行的一种方式。相比传统的云服务器架构,Serverless 架构更加灵活、高效,能够最大限度地降低开发人员的负担。

    2 个月前

相关推荐

    暂无文章