ECMAScript 2020 源码阅读笔记

阅读时长 3 分钟读完

ECMAScript 2020是JavaScript的最新标准,它包含了一些新的语言特性和新的API。在本文中,我们将深入了解ECMAScript 2020的特性,并通过源码阅读的方式来学习和理解这些新特性的实现。

BigInt

BigInt是ECMAScript 2020中的一项新特性,它是一个基于数字的对象类型。在JavaScript中,数字的范围被限制在了 2<sup>53</sup> -1 的范围内,而使用BigInt对象可以允许我们操作更大的整数。

使用BigInt非常简单,只需要在数字后加一个n即可。

在V8引擎中,BigInt的实现方式为使用C++中的整数类型int64_t来实现。我们可以通过V8的源代码来实现BigInt对象。

Optional Chaining

Optional Chaining是一个非常有用的新特性,允许我们在访问嵌套对象时避免出现undefined错误。在以前,我们需要通过&&语句来判断每一个嵌套的对象是否存在,而使用Optional Chaining之后,我们可以更加简洁地访问嵌套对象。

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

----- ------ - ----------------------------
展开代码

在V8引擎中,Optional Chaining的实现方式为在AST(抽象语法树)转换阶段,将可选的属性操作符包裹在另一个操作符中,形成新的AST节点如 OptionalMemberExpression、OptionalCallExpression 等。我们可以通过阅读V8源代码来更好地理解Optional Chaining的实现方式。

Promise.allSettled

Promise.allSettled的作用是返回一个Promise,当所有的Promises都被解决时,返回一个数组来表示每个Promise的结果。与Promise.all不同的是,Promise.allSettled会等待所有的Promises被解决,而不管它们是被拒绝还是被接受。

在V8引擎中,Promise.allSettled的实现方式类似于Promise.all的实现方式,通过遍历Promise数组来解决每个Promise,最终返回包含每个Promise结果的数组。

总结

以上三个新特性都是ECMAScript 2020中非常有用的特性,在我们日常的开发中也会经常使用到。通过阅读V8引擎源代码,我们更好地理解了它们的实现方式,这对我们深入理解JavaScript引擎的工作原理非常有帮助。

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

纠错
反馈

纠错反馈