从 ECMAScript 到 ECMA-308:ES9 未来语言标准的开头

阅读时长 5 分钟读完

ECMAScript 是一种广泛使用的编程语言,它是具有标准化规范的 JavaScript 的实现。自从 ECMAScript 1 以来,它一直在不断地演变和发展,目前的最新版本是 ECMAScript 9 (ES9)。在 ES9 发布之前,ECMA TC39(技术委员会 39)发布了一个名为 ECMA-308 的草案,该草案旨在提供 ES9 功能的实例实现。

ES9 新特性简介

ES9 引入了许多新特性,其中最显著的是异步迭代器。ES9 还引入了一些小的语法改进,例如 rest/spread 属性和正则表达式反向预查。

异步迭代器

异步迭代器是一种允许异步生成器返回异步可迭代对象的机制。异步生成器(Async Generator)在 ES8 中就被引入,允许通过 async 和 yield 关键字的组合创建异步迭代器。

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

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

但是,在 ES8 中,使用异步生成器时,无法在循环中返回异步可迭代对象,因为 for 循环不支持异步操作。ES9 中的异步迭代器可以解决这个问题。

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

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

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

在上面的示例中,我们创建了一个异步可迭代对象 asyncIterable,它通过实现 [Symbol.asyncIterator] 方法来支持异步迭代。在迭代器的 next 方法中,我们使用一个异步函数来模拟异步操作。

rest/spread 属性

ES9 中引入了 rest 和 spread 属性,它们可以像 rest 参数和展开运算符一样使用。

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

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

上面的代码演示了如何使用 rest 和 spread 属性。

正则表达式反向预查

ES9 引入了一种新的正则表达式语法,即反向预查。反向预查可用于查找后面跟着某个模式的文本。

在上面的例子中,我们使用反向预查来查找后面不是 b 的 a。

ECMA-308

ECMA-308 是一个由 ECMA TC39 发布的草案,它旨在提供 ES9 功能的实例实现。它提供了一个库,该库可用于利用 ES9 新功能进行对象组合,本文涉及其中的一些特性。

pipes 方法

pipes 方法允许在对象函数串联中执行异步操作。类似于 Unix 管道,它将一个对象的输出传递给另一个对象的输入,最终返回一个新对象。pipes 方法接受任意数量的参数,每个参数是一个函数,函数的输入是前一个函数的输出。如果所有函数都是同步的,则返回的对象也是同步的。

在上面的示例中,我们使用 pipes 方法串联两个异步函数 asyncDouble 和 asyncAdd。最终返回的函数 myFunction 可以在异步函数执行完成后返回它们的输出。

mapAsync 方法

mapAsync 方法允许在数组的每个元素上执行一个异步函数。它返回一个 Promise,该 Promise 在所有操作完成后解决为新的数组。

在上面的示例中,我们使用 mapAsync 方法在每个数组元素上执行异步函数 asyncDouble。

总结

ES9 引入了许多新特性,包括异步迭代器、rest/spread 属性和反向预查。ECMA-308 提供了一个库,该库可用于使用这些新功能进行对象组合。这些新特性可以帮助开发人员更轻松地处理异步操作,并在代码中实现更多的组合。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b22fe148841e9894e79df3

纠错
反馈