ECMAScript 2020 规范变更了哪些地方?有哪些新特性?

阅读时长 6 分钟读完

ECMAScript 是编程语言 JavaScript 的官方规范。它是一个被广泛使用的语言,并且经历了多次版本更新。在2020年6月的 ECMAScript 2020 版本中,引入了一些新特性和对现有规范的变更。

本文将对 ECMAScript 2020 版本中的规范变更和新增特性进行详细介绍,并提供示例代码,以便您更好地理解和学习这些变化。

规范变更

import() 语句

在之前的 ECMAScript 版本中,import 语句只能在顶层使用。这就意味着它不能在函数和块内使用,例如:

ECMAScript 2020 引入了 import() 函数,这可以让你在函数和块内部异步加载模块。这个新的语法返回一个 promise,该 promise 在模块加载完成后会被解析。以下是一个示例:

可选链操作符

在之前的 ECMAScript 版本中,如果您尝试访问一个未定义或 null 的属性或方法,您将会得到一个错误:

ECMAScript 2020 引入了可选链操作符 ?.…,它允许您在不访问未定义或 null 属性和方法的情况下,安全地混合和匹配属性。以下是一个示例:

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

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

空位合并运算符

在之前的 ECMAScript 版本中,如果首选方法不存在或返回 undefined 时,您可以使用或运算符(||)为其提供一个默认值:

ECMAScript 2020 引入了空位合并运算符??,它对 a 的值进行严格检查,如果 a 是 null 或 undefined,则会返回 b,否则会返回 a 的值。以下是一个示例:

这个语法非常适合用于配合默认值运算符的逻辑:

BigInt

在 ECMAScript 2020 中,引入了一种用于处理大整数的新原始数据类型 BigInt。此类型的数字比 Number 类型更大,可以安全地处理 JavaScript 中 Number 类型无法正常处理的数值。

以下是一个示例:

请注意,数字后面必须添加 n,表示这是一个 BigInt 类型,而不是 Number 类型。

新特性

Promise.allSettled()

Promise.allSettled() 方法返回一组 Promise 的状态和值,包括已解析的 Promise 和已拒绝的 Promise。它返回的是一个 Promise 结果数组,其中每个 Promise 结果对象代表传递的 Promise 是否已完成和其结果(或原因)是什么。

下面是一个示例:

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

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

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

globalThis

在客户端 JavaScript 中,通常使用 window 全局对象来访问一些全局属性和方法。但是在其他上下文中(例如 Web Worker 和 Node.js 中的 worker_thread),全局对象可能有不同的名称,因此不能以相同的方式使用。

ECMAScript 2020 引入了一个名为 globalThis 的新全局对象,这个对象是全局作用域链的顶级对象,您可以在所有环境中使用它。以下是一个示例:

这将在任何环境中显示一个警告消息,而不仅仅是在窗口中。

可调用的类型与 Reflect.construct

ECMAScript 2020 引入了可调用的类型和 Reflect.construct() 方法。

可调用的类型是一种新的内置类型,可以像函数一样调用。它们是由被称为特殊 call 方法的对象定义的。以下是一个示例:

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

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

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

Reflect.construct() 方法与 new 操作符类似,用于创建对象实例。其主要区别是 Reflect.construct() 允许您调用一个可调用对象,而不仅仅是一个类构造函数。以下是一个示例:

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

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

结论

ECMAScript 2020 引入了许多有用且令人兴奋的新变化和特性,包括支持异步模块加载的 import()、可选链操作符和空位合并运算符、BigInt、Promise.allSettled()、globalThis 和可调用的类型与 Reflect.construct() 方法。

我们强烈建议您深入了解这些变化和特性,以便更好地使用 JavaScript 语言。

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

纠错
反馈