ECMAScript(简称 “ES” 或 “JavaScript”)作为一种流行的编程语言,每年都会发布新版本。在今年的 ECMA-262 标准中,也就是 ECMAScript 2020,增加了一些新特性和扩展。这篇文章将会介绍这些新特性并提供一些可以使用的示例代码。
1. 匿名函数的名字推断
以前,我们需要像这样声明一个常量并命名函数:
const foo = function() { // ... }
在 ECMAScript 2020 中,我们可以使用名字推断,避免了名称的冗余:
const foo = function myName() { // ... }
myName
将作为该函数的内部名称,仅在该函数内可见。
这种做法的主要好处是可读性的提高,因为开发者不再需要为每一个匿名函数都想一个名称。
2. 可选的链式调用
在以前的版本中,我们若想链式操作一个对象,我们可能需要先判断该对象是否存在。这时我们就需要使用繁琐的条件判断代码:
if (object && object.prop && object.prop.method) { object.prop.method() }
在 ECMAScript 2020 中,我们可以使用可选链式调用,它能直接在对象不存在时返回 undefined
而不是抛出一个异常。
object?.prop?.method()
这种方法大大降低了代码的冗余,提高了可读性。你不需要再编写很多行判断 NULL 的代码了。
3. 动态 import()
在 ECMAScript 2020 中,我们可以动态地从一个 JavaScript 模块中导入一个模块,并且无需在运行时提前声明。之前我们可能需要这样写代码:
import('path/to/module') .then(module => { // ... }) .catch(error => { console.log(error) })
使用动态 import()
,我们可以更加方便地动态引入模块,并且避免了在前置声明时的错误。
const module = await import('path/to/module')
4. BigInt
JavaScript 默认的整数范围为 -2^53 ~ 2^53
,使用 BigInt
类型可以扩展这个范围。在 ECMAScript 2020 中,我们可以使用 BigInt
类型。
const bigNumber = 9007199254740992n
注意后面的 n
后缀。它能告诉 JavaScript 解释器这个数是一个 BigInt
类型。在进行比较、运算等操作时,我们同样需要使用 BigInt
。
const x = 2n ** 54n const y = x + 6n console.log(y) // 18014398509481988n
5. Promise.allSettled()
在 ECMAScript 2020 中,新添加了一个 Promise.allSettled()
方法。它将会被 Promise.all()
替换,因为 Promise.allSettled()
不会在最短路径上的 Promise 发生错误时就打断 Promise 的执行。而 Promise.all()
会在第一个 Promise 错误后立即结束。
-- -------------------- ---- ------- ----- -------- - - ----------------------- ------------------------ ---------------------- - ----------------------------------------- -- - -------------------- --展开代码
输出如下:
[ { status: 'fulfilled', value: 'foo' }, { status: 'rejected', reason: 'Error' }, { status: 'fulfilled', value: 'bar' } ]
结论
本文介绍了 ECMAScript 2020 中新增的一些特性,这些特性能让我们编写更加清晰、简化、易于阅读和更加高效的代码。学习这些新特性将会更好地提升我们的 JavaScript 编程技能,为我们的日常开发工作带来更好的体验以及效果。
参考资料:
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676e4df37f7abb920fb2e264