闪亮的 ECMAScript 2018 (ES9) 新特性

阅读时长 5 分钟读完

JavaScript 的标准制定组织 ECMAScript 在 2017 年底发布了 ECMAScript 2018(简称 ES9)的最终版本,在新的版本中引入了一些非常有趣且实用的新特性。本文将介绍其中最重要且有用的一些新特性,包括异步迭代器、正则表达式和 Promise 的更新等。

异步迭代器

异步迭代器是 ES9 中最为重要的更新之一。在 ES8 中,引入了同步迭代器,使我们可以对数组、Map、Set 等集合类型进行迭代。而在 ES9 中,新增了异步迭代器,可以在遍历异步数据流(例如异步生成器或异步请求)时使用。

异步迭代器采用 Symbol.asyncIterator 来定义,并返回一个对象,该对象必须实现 next 函数,返回一个 Promise 对象,用于控制迭代器的下一个值何时被生产出来,示例如下:

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

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

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

上述代码会每隔一秒输出 1、2、3,其中 asyncGenerator 函数是一个异步生成器,它的每个 next 值都是在一个延时操作之后才返回的。而 asyncIterator 通过 for await of 语法来遍历并输出异步生成器所生成的值。

异步迭代器的出现,使得我们可以方便地处理有异步操作的数据流,如异步请求、异步文件读取等。这些都可以通过 for await of 语法来处理。

正则表达式的更新

在 ES9 中,正则表达式引入了一些实用的更新,包括正则表达式命名捕获组、反向断言以及 Unicode 范围表达式。

我们先来看一下正则表达式的命名捕获组。以往,我们可以通过'$1'来获取正则表达式中第一个捕获组的值,而现在我们可以通过名称来获取捕获组的值,示例如下:

在上述代码中,正则表达式使用了'(?<month>\d{2})'这样的语法来定义了一个名为 month 的捕获组。使用解构语法的'{ groups }',我们可以方便地获取到各个捕获组的值,更加直观和方便。

除了命名捕获组外,ES9 还新增了反向断言的特性。我们可以使用'(?<=...)'或'(?<!...)'这样的语法来定义正则表达式的前置或后置断言,示例如下:

在上述代码中,我们使用'(?<=hello )'来定义了一个前置断言,表示匹配'hello '后面紧跟着'world'的字符串。这是非常实用的特性,在一些复杂的全文匹配中可以方便地取出我们需要的内容。

最后,ES9 引入了 Unicode 范围表达式,我们可以使用'[\p{...}]'这样的语法来表示一些 Unicode 范围内的字符,示例如下:

在上述代码中,我们使用了'[\p{Letter}+]'这样的正则表达式来限制字符串只能由大小写字母组成。注意,使用 Unicode 范围表达式时,需要添加'u'标志来进行开启。

Promise.finally 方法

在 ES9 中,Promise 类型新增了 finally 方法,该方法将在 Promise 异步任务执行完毕后无论成功或失败都会被执行。这个特性十分实用,我们可以在 finally 方法中进行一些收尾工作,例如关闭数据库连接、清理工作等。

示例如下:

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

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

在上述代码中,我们在 Promise 对象执行完毕后添加了 finally 方法,无论任务成功或失败都会在 finally 方法中进行处理。这是一个非常实用的功能。

总结

ECMAScript 2018(ES9)引入了许多实用的新特性,其中异步迭代器、正则表达式和 Promise 的更新是最为重要和常用的更新。异步迭代器和 Promise 的更新让我们可以更方便地处理异步数据流和对 Promise 进行更完善的收尾处理,而正则表达式的命名捕获组、反向断言和 Unicode 范围表达式则为我们提供了更为强大的正则表达式语法特性。这些新特性的引入,让我们的开发变得更加高效、直观和实用。

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

纠错
反馈