如何避免 ES10 中 Object.fromEntries 的点通配符错误

如何避免 ES10 中 Object.fromEntries 的点通配符错误

在 ECMAScript 2019 中,Object.fromEntries 函数被引入了。 这个函数允许我们将键值对数组快速转换为对象。 但是,如果我们在其中使用了点表示法,则会导致一个非常难以察觉的错误。 在本文中,我们将深入研究为什么会发生这种错误,以及如何避免它。

关于 Object.fromEntries

首先,让我们看一下 Object.fromEntries 是如何工作的。 该函数允许我们从一个包含键值对的数组中创建一个对象。 例如,我们可以将以下数组转换为对象:

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

这是非常方便的,因为通常我们需要将键值对数据结构转换为对象,并且这个函数可以让我们做到这一点非常简单和快捷。

但是,在某些情况下,我们需要使用点表示法引用对象属性。 例如,我们可能会这样写:

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

这个示例假设我们已经知道 a,b 和 c 的属性名称,因此我们可以使用对象解构语法从对象中提取它们。

问题是当我们将数组传递给 Object.fromEntries 时,我们必须非常小心,否则可能会遇到一个非常棘手的错误。

点通配符错误

让我们看一下下面的代码示例:

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

这个示例将一个包含键值对的数组转换为对象,并从该对象中提取了 a,b 和 c 属性,但它的输出却是“ undefined”。

问题在哪里?

实际上,这段代码有一个非常微妙的错误:在 Object.fromEntries 函数中,我们不能使用点来表示属性名称,否则这个错误就会发生。

让我们详细研究一下它是如何发生的吧。 当我们使用点通配符来解构对象时,JavaScript 会在对象中寻找与属性名称完全匹配的属性。 因此,当我们尝试这样做时:

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

JavaScript实际上会尝试查找 obj.a、obj.b 和 obj.c 属性。 但是,我们在 Object.fromEntries 函数中使用的数组实际上创建了这个对象:{ 'a': 1, 'b': 2, 'c': 3 }。

这个对象的属性名字带有引号,因此 JavaScript 无法找到与 obj.a,obj.b 和 obj.c 完全匹配的属性。 因此,当我们尝试这样做时:

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

JavaScript只会返回变量a、b和c的 undefined 值,因为找不到对应的属性名称。

解决问题

为了避免这种问题,我们可以使用方括号表示法来访问对象属性,就像这样:

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

这种方法消除了属性名称带引号的问题,因为我们可以通过字符串形式传递属性名称从而正确的引用这些属性。 例如,我们可以这样访问属性:

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

这样我们就可以避免点通配符错误了。

总结

在本文中,我们深入研究了在使用 Object.fromEntries 函数时出现的点通配符错误。 我们了解了为什么会出现这种错误,以及如何通过使用方括号表示法来避免它。 通过我们的示例和解释,我们希望能够为您提供深度和学习以及指导意义,并且可以帮助您避免这个常见的错误。 如果您在使用 Object.fromEntries 函数时遇到了任何问题,请记住坚持使用方括号表示法,以确保您不会遇到点通配符错误。

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


猜你喜欢

  • Jest 测试中的 Snapshot 技术详解

    Jest 是一个 Facebook 开源的 JavaScript 测试框架,它提供了一系列的工具和 API,可以让我们写出高效且可维护的测试代码。其中,Snapshot 技术是 Jest 的一个重要特...

    1 年前
  • Custom Elements 实现导航栏组件(Navbar)

    前言 在现代 Web 应用中,导航栏是常见的组件之一。它通常位于网页的顶部或底部,用于导航到其他页面或功能。开发者可以通过现有的 UI 库或框架来实现导航栏组件,如 Bootstrap、Semanti...

    1 年前
  • # Mongoose 中文文档官方更新文档

    Mongoose 中文文档官方更新文档 Mongoose 是一款在 Node.js 平台下非常流行的 MongoDB 对象模型工具,它提供了丰富的特性和插件来简化 MongoDB 的操作,减少开发人员...

    1 年前
  • Express.js 中测试驱动开发的方法和工具推荐

    测试驱动开发(Test-Driven Development,简称 TDD)是一种面向测试的软件开发方法,它可以帮助开发者更加高效地编写代码,减少错误和调试时间。在前端开发中,Express.js 是...

    1 年前
  • ES11: Promise.allSettled 方法使用说明

    Promise.allSettled 方法是 ES11 新加入的 Promise 方法,它可以接受一个 Promise 数组作为参数,返回一个新的 Promise 实例,该实例在所有的 Promise...

    1 年前
  • Fastify 中的 Schema 教程

    Fastify 是一个快速且低开销的 Node.js Web 框架,它非常适合用于构建高效、可伸缩的 Web 应用程序。在 Fastify 中,Schema 是一个核心功能,用于验证请求和响应负载,它...

    1 年前
  • Angular 中如何使用 @Output 装饰器及 EventEmitter 发送事件

    Angular 中的 @Output 装饰器和 EventEmitter 提供了一种方便的机制来实现组件间的通信。在这篇文章中,我们将深入学习如何使用它们来发送事件。

    1 年前
  • # Sequelize 中如何实现完整性约束

    Sequelize 中如何实现完整性约束 在关系型数据库中,完整性约束是一种保证数据不被破坏、不失真的重要手段。Sequelize 作为一种 Node.js 的 ORM 框架,也提供了完整性约束功能。

    1 年前
  • 国内外 Web Components 标准化进程及其相关规范

    随着 Web 技术的日益发展,Web Components 技术逐渐成为前端开发者的热门话题。Web Components 技术是指一系列关于 web 应用组件化的规范和工具,帮助开发者将整个应用分为...

    1 年前
  • ESLint+VSCode 自动格式化代码

    ESLint+VSCode 自动格式化代码 在前端开发中,代码的格式化是一项非常重要的工作。良好的代码格式不仅可以使代码更加易读,还有助于代码的维护和开发。但是,手动格式化代码往往是一项非常繁琐且浪费...

    1 年前
  • Enzyme:React Native 测试工具的完美伴侣

    前言 React Native 是一个让前端开发者能够轻松创建原生应用的框架,但是随着代码规模的增大,测试变得越来越重要。而 Enzyme 就是一个非常优秀的测试工具,它可以帮助我们方便地进行 Rea...

    1 年前
  • 使用 ES9 中的 Object.fromEntries 方法来转换键值对为对象

    在 JavaScript 编程中,我们经常需要在键值对之间转换。这种需求在前端开发领域中尤其常见,涉及到许多与用户输入、API 响应等交互相关的场景。在 ES9 中,新增了一个称为 Object.fr...

    1 年前
  • 对比 Koa.js 和 Express.js:哪一个更适合你的下一个项目?

    随着 Node.js 技术的发展和广泛应用,前端界的框架也越来越多。其中 Express.js 及 Koa.js 都是非常受欢迎的 Node.js 框架。本文将从多个方面对比两者的异同,帮助读者选择更...

    1 年前
  • Redis 集群环境下数据同步异常的解决方法

    在 Redis 集群环境下,数据同步异常是一个十分常见的现象。这种异常会导致 Redis 集群中的数据不一致,进而影响应用程序的正确性和性能。本文将介绍 Redis 集群环境下数据同步异常的解决方法。

    1 年前
  • CSS Reset 对于网页排版的优化

    CSS Reset 是一种优化网页排版的技术。在开发网页时,每个浏览器都有自己的默认样式表,这会导致不同的浏览器展示相同的 HTML 后效果不同,甚至可能完全不同。

    1 年前
  • CSS Flexbox 实现的实验性联动布局

    在前端开发中,布局是一个非常重要的部分。随着 Web 应用的复杂性不断增加,传统的布局方式逐渐显得不够灵活和强大。CSS3 的 Flexbox 能够提供更为强大的布局管理能力,本篇文章将介绍 Flex...

    1 年前
  • MongoDB 中的批量写入操作实现

    介绍 在 MongoDB 中,批量写入操作是一个非常常见的操作,它可以大大提高数据的写入效率。在实际的开发中,我们可能需要对多个文档进行插入、更新或删除操作,这时候使用批量操作可以让我们的代码更加简洁...

    1 年前
  • Socket.io实现聊天功能详解

    本文将介绍如何使用Socket.io实现一个基于web的聊天应用。Socket.io是一个websocket库,它可以在客户端和服务器之间建立实时的双向通信连接,使得页面可以及时地接收到来自服务器的消...

    1 年前
  • LESS 中使用父元素的技巧

    LESS 中使用父元素的技巧 在前端开发中,CSS 是必不可少的一部分。而 LESS 作为一款预处理器,可以帮助我们更方便、更高效地编写 CSS。在 LESS 中,使用父元素的技巧可以让我们更轻松地管...

    1 年前
  • 如何在 Node.js 中使用 Sequelize 进行 ORM 操作

    在开发 Web 应用程序的过程中,我们通常需要使用数据库来存储和管理数据。而 ORM(Object-Relational Mapping)则可以将数据库中的数据映射到应用程序中的对象上,以便更方便地操...

    1 年前

相关推荐

    暂无文章