ES11 中的诸多修订点、API 和新功能

ECMAScript 2020,也称为 ES11,是 JavaScript 的最新版本。这个版本带来了许多新特性和改进,旨在使开发更加简单方便。本篇文章将介绍其中的一些重要新功能和 API。

1. 可选链操作符

可选链操作符是ES11最引人注目的特性之一,它是一种安全的方式来访问对象上可能不存在的嵌套属性。在以前,要访问一个对象中的嵌套属性,需要使用冗长的 if 语句判断是否存在。有了可选链操作符,我们可以实现更简单和可读性更好的代码。

考虑以下示例,一个由多个嵌套对象构成的数据集合:

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

如果要访问用户的办公电话号码,以前的代码可能长成这个样子:

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

现在,我们可以使用可选链操作符来简化代码:

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

这不仅简单易懂,还会在未定义或不正确的键时返回undefined,避免了错误的处理逻辑。

2. 空值合并操作符

空值合并操作符是另一项实用的功能,它也减少了冗长的代码。它将处理变量为nullundefined的情况变得更加简单。

考虑以下代码:

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

在 ES11 中,我们可以使用空值合并操作符来达到相同的结果:

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

如果变量a的值为nullundefinedx 会被赋予 default 的值。

3. 全局对象的 globalThis

ES11引入了一个新的全局对象 globalThis,它可以在任何地方获得全局对象,无论代码在浏览器还是 Node.js 等其他环境中运行,在访问全局属性时非常方便。

在浏览器中:

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

在 Node.js 中:

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

4. 字符串操作扩展

ES11中的字符串扩展包括了 String.prototype.matchAll() 和 String.prototype.replaceAll() 方法。

String.prototype.matchAll()

matchAll() 方法返回一个迭代器,它通过在字符串上执行全局正则表达式匹配来查找匹配项。返回的迭代器提供了每个匹配项的详细信息。

考虑以下代码:

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

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

输出结果:

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

String.prototype.replaceAll()

replaceAll() 方法是字符串全局替换的一个短语。这个方法接受两个参数,第一个参数用于匹配,第二个参数用于替换匹配项。

例如:

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

5. Promise allSettled()

在空间有限的前端应用程序中,资源都是宝贵的,无论是网络连接还是内存占用。为了最大化利用这些资源,我们希望更好的理解 Promise 如何工作,并掌握它的最新特性。

Promise.allSettled() 返回一个 Promise,这个 Promise 在所有 Promise 解析或拒绝后才解决,并在解决时返回一个及其原始 Promise 的描述数组。这意味着在多个 Promise 解析或拒绝时,Promise.allSettled() 不会抛出异常,而是为每个 Promise 返回一个详细的状态,让您在处理 Promise 时更加灵活。它既不被解析所有 Promise 也不被拒绝所有 Promise。

考虑以下代码块:

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

在 Promise.all() 中的 Promise 之一拒绝时,Promise.all() 将被拒绝并抛出异常。这可能导致应用程序崩溃或产生不可逆的结果。

现在,考虑使用Promise.allSettled()方法。

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

在这种情况下,即使有 Promise 被拒绝,仍然会忠实地解决 Promise。此间接增加了应用程序的鲁棒性。

结论

ES11 中的一些新功能和 API 扩展了 JavaScript 的能力,使其更直观、可读和安全。通过学习这些新特性,您将能够更有效地开发 Web 应用程序并为自己的团队带来更大的价值。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672ebe32eedcc8a97c8aa6de