ES9 之 Objects 的扩展

在 ECMAScript 2018 (ES9) 版本中,新增了一些有关对象的扩展。这些扩展为前端开发提供了更加灵活和高效的开发方式。本文将主要介绍对象的三个重要扩展:对象扩展运算符、异步迭代器以及原型方法扩展。

对象扩展运算符

对象扩展运算符可以将对象展开成多个属性值。它在对象字面量和函数调用中使用。它允许我们将一个对象上的属性和方法展开并插入到另一个对象中。我们一般使用“...”符号表示对象扩展运算符。

对象字面量

在对象字面量中使用对象扩展运算符:

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

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

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

函数调用

在函数调用中使用对象扩展运算符:

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

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

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

异步迭代器

异步迭代器可以被用于迭代异步数据源。它是基于迭代器协议的一个扩展。在这个协议下,一个对象被视为“可迭代对象”,如果它有一个可以被调用的 Symbol.iterator 方法,这个方法返回一个“迭代器对象”。

在异步迭代器中使用 Symbol.asyncIterator 方法来定义异步迭代。

异步迭代器示例

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

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

在上述代码中,我们定义了一个[Symbol.asyncIterator]方法,它返回一个对象,这个对象有一个next方法,返回一个Promise。在这个示例中,当i小于3时,next方法返回一个延迟1秒后返回i的值的 Promise。

接下来在async function中使用for await ... of执行异步迭代,并在控制台中输出结果。

原型方法扩展

ECMAScript 2018为 Object 和 Array 对象添加了2个原型方法:Object.values()Object.entries() 以及 Array.prototype.flat()Array.prototype.flatMap() 方法。它们可以在对象和数组中派上很大的用场。

Object.values() 和 Object.entries()

Object.values() 方法返回一个给定对象的所有可枚举属性值的数组。Object.entries() 方法返回一个给定对象的所有可枚举属性的键值对的数组。它们可以很方便地将对象转化为数组。

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

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

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

Array.prototype.flat() 和 Array.prototype.flatMap()

Array.prototype.flat() 方法将嵌套的数组“扁平化”,即将嵌套数组的所有元素展平到一维数组中。

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

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

Array.prototype.flatMap() 方法首先使用映射函数将每个元素映射到一个新的网络上,然后将结果扁平化到新的数组中。与Array.prototype.flat() 不同,映射函数在扁平化之前先执行。

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

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

总结

在 ES9 中的对象和数组的扩展方法有助于开发者更好地管理和处理数据。对象扩展运算符可以让代码变得更简洁,同时异步迭代器可以处理异步数据源,而原型方法扩展则可以让处理数组和对象更加方便。在实际的开发中,我们应该根据项目实际情况灵活运用这些扩展方法,提高开发效率。

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


猜你喜欢

  • Material Design 中 Toolbar 的使用详解

    随着移动互联网的不断发展,作为前端开发人员,我们需要时刻关注最新的设计趋势和技术,以便更好地满足用户的需求。Material Design 是 Google 推出的一套设计规范,在许多 Google ...

    1 年前
  • 解决基于 Custom Elements 实现的组件无法正确嵌套的问题

    在前端开发中,组件化已经成为一种重要的技术手段。Custom Elements 是 Web Components 规范中最基础和核心的一部分,它允许开发者自定义 HTML 标签,将其封装成组件,并使用...

    1 年前
  • ECMAScript 2019 中的新特性:动态 import() 函数的使用和优化

    ECMAScript 2019 中的新特性:动态 import() 函数的使用和优化 随着前端技术的不断发展,开发者们需要用更高效、更灵活的方式来实现页面的优化和性能的提升。

    1 年前
  • 使用 Mocha + Nock 和 nock-back 实现单元测试 Mock 数据

    在前端开发中,单元测试是一项非常重要的工作。它可以有效地保证代码的质量和稳定性,减少代码的 Bug,提高开发效率。 在单元测试中,Mock 数据是非常重要的一部分,它可以模拟接口返回的数据,让我们在没...

    1 年前
  • 如何使用 Next.js 打造 PWA 应用

    PWA(Progressive Web App)是一种新型的网页应用程序,可以实现近似于本地应用的功能和体验,例如离线缓存、推送通知等。Next.js 是一款流行的 React 框架,可以帮助我们方便...

    1 年前
  • Express.js 中如何设置请求头

    在前端开发中,我们经常需要设置请求头来实现一些特定的功能,比如添加认证信息、设置跨域请求等。Express.js 是一个常用的 Node.js 框架,它提供了多种方法来设置请求头,本篇文章将详细介绍这...

    1 年前
  • 在ECMAScript 2017 (ES8)搞定TypedArray原型问题

    在前端开发中,我们通常需要处理二进制数据。在 JavaScript 中,我们可以使用 TypedArray 的数据类型来处理这些数据。然而,在早期的 ECMAScript 版本中,TypedArray...

    1 年前
  • GraphQL 的实例应用及分析

    GraphQL 是一种用于 API 构建的查询语言,最初由 Facebook 开发并开源。GraphQL 具有强大的查询能力,可以让用户在请求数据时自由地定义需要获取的数据结构和内容。

    1 年前
  • ESLint:如何使用 ESLint 检查 Vue.js 代码

    ESLint 是一个 JavaScript 代码检查工具,可以帮助我们在开发过程中发现一些代码错误和不规范的写法。在 Vue.js 项目中,我们也可以使用 ESLint 来提高代码质量和团队协作效率。

    1 年前
  • Headless CMS 的未来是什么?

    在现代 Web 应用程序的开发中,作为一个前端开发者,我们经常需要用到内容管理系统(CMS)来管理网站的内容。此前,我们使用的是传统 CMS 来管理内容,但现在我们逐渐发现 Headless CMS ...

    1 年前
  • PM2 配置文件详解与示例

    什么是 PM2? PM2 是一个流行的 Node.js 进程管理器,它可以帮助我们启动、停止、重启和监控 Node.js 进程。PM2 还提供了许多有用的功能,如负载均衡、自动重启、日志管理等。

    1 年前
  • 以异常断言的方式使用 Chai

    在前端开发中,错误和异常是难以避免的。而如何有效地处理错误和异常,也是一个重要的话题。在本文中,我们将介绍一种处理错误和异常的模式:异常断言。同时,我们将使用一个流行的 JavaScript 测试框架...

    1 年前
  • 服务器推送事件(Server-Sent Events)介绍

    在网络应用程序中,即时通信和更新非常重要。我们需要一种方法,可以实时地从服务器获取更新,同时不需要反复执行轮询请求以占用带宽等资源。在这种情况下,服务器推送事件(server-sent events)...

    1 年前
  • Socket.io 中使用 Socket.io-client 进行客户端开发的教程

    介绍 Socket.io 是一个面向实时应用的 Javascript 库,它可以在客户端和服务器端之间建立双向通信的桥梁。而 Socket.io-client 是 Socket.io 的客户端库,用于...

    1 年前
  • JavaScript Promise 中的异步错误调试技巧

    JavaScript Promise 中的异步错误调试技巧 Promise 是 JavaScript 提供的一种处理异步操作的方案,它的出现解决了回调函数中的回调地狱,使得异步操作的代码更加简洁和易读...

    1 年前
  • PWA 在 iOS 中兼容性问题的解决方案

    随着 PWA 技术的不断发展,移动端 Web 应用的开发已经越来越受到开发者的关注。PWA 技术的优势在于可以实现像 Native 应用一样的用户体验,以及离线访问的功能。

    1 年前
  • ECMAScript 2016 中的尾调用优化

    尾调用优化(Tail Call Optimization)是指编译器在编译函数调用时,会将满足一定条件的尾递归函数编译成循环,从而减少函数调用栈的使用。这一特性在 ECMAScript 2016 中被...

    1 年前
  • 如何定制自己的 CSS Reset?

    什么是 CSS Reset? CSS Reset 是一种常见的前端技术,目的是在各个浏览器之间消除默认样式的差异,使页面尽可能一致。一般情况下,浏览器对某些 HTML 元素的默认样式是不一样的,这就需...

    1 年前
  • 解决 Fastify 中的路由冲突问题

    Fastify 是一个基于 Node.js 的快速且低开销的 Web 框架,它具有出色的性能、可扩展性和易用性,因此在前端开发中被广泛使用。然而,在使用 Fastify 进行路由管理时,经常会遇到路由...

    1 年前
  • Cypress 如何测试多语言应用

    前言 在当今全球化的时代,涉及多语言的应用屡见不鲜,这也给前端测试带来了一些新的挑战。Cypress 是一种快速、简单、可靠的前端自动化测试工具。本文将介绍如何使用 Cypress 测试多语言应用,并...

    1 年前

相关推荐

    暂无文章