ECMAScript (ES) 是一种语言标准,它定义了 JavaScript 的语法和语义。每年,ECMA International 都会发布一个新的 ECMAScript 标准,以便我们可以使用新的语言特性来编写更好的 JavaScript 代码。在本文中,我们将讨论 ECMAScript 2020 (ES2020) 的新功能。
一、 Promise.allSettled()
在过去,使用 Promise.all() 来等待多个 Promise 完成并返回结果已经是非常普遍的技术,但其中有一个问题:只要有一个 Promise 被拒绝了,那么整个 Promise.all() 就被拒绝了。 在实际应用中,这可能并不总是我们想要的结果,因为我们可能只是想知道每个 Promise 的结果。在 ES2020 中,我们可以使用 Promise.allSettled(),这个方法将等待所有 Promise 完成,无论结果是成功的还是失败的,然后返回一个对象数组,每个对象都包含 Promise 结果信息。
const promise1 = Promise.resolve(10); const promise2 = Promise.reject("Failed"); Promise.allSettled([promise1, promise2]) .then((results) => { console.log(results); });
输出结果:
[ {status: "fulfilled", value: 10}, {status: "rejected", reason: "Failed"} ]
二、 可选链操作符
在过去,我们经常使用 && 运算符检查一个对象是否为 null 或 undefined。例如,我们可以使用以下代码防止引用一个不存在的对象属性:
let fullName = person && person.name;
但是,这个代码在跨越多个嵌套的属性时就变得非常笨拙和丑陋了。在 ES2020 中,我们可以使用可选链操作符 (?),使代码更加优雅并确保不会引用不存在的值:
let fullName = person?.name;
这个操作符表示如果 person 对象存在,那么就取名字属性,否则就返回 undefined。使用可选链操作符,我们还可以更好地访问嵌套的属性或方法,例如:
obj?.prop?.method?.()
三、 全局对象 globalThis
在浏览器环境中,我们可以使用 window 对象来访问全局作用域。在 Node.js 中,我们可以使用 global 对象来做同样的事情。但是,在某些情况下,我们需要一种跨平台的方案来访问全局对象。在 ES2020 中,我们可以使用 globalThis 对象来解决这个问题。
// 全局环境中的 this console.log(this); // 在浏览器中,这是 window 对象 console.log(globalThis); // 在 Node.js 中,这是 global 对象 console.log(globalThis);
四、 BigInt
在 JavaScript 中,数字的安全范围已经变得越来越大,已经可以处理很大的整数了。但是,有时候我们可能需要使用更大的数,例如处理密码、哈希或其他加密问题时。在 ES2020 中,我们可以使用 BigInt 类型来表示任意精度的整数。示例:
const largeNumber = 100000000000000000000n; const anotherLargeNumber = BigInt("123456789012345678901234567890");
注意,在声明 BigInt 变量时,一定要在数值后面加上 n 或者使用 BigInt() 函数。否则,这个数值可能会视为普通的 Number 类型。
五、 模块化的动态 import
在过去,我们只能在静态地引入模块。这意味着,当我们调用 import 时,我们必须知道要引入哪个模块。但是,有时候我们需要在运行时根据一些条件选择要引入的模块。在 ES2020 中,我们可以使用动态 import,这使得我们可以在程序运行时动态地引入模块。示例:
async function getModule(moduleName) { const module = await import(`./modules/${moduleName}.js`); return module; }
这里我们使用了模板字面量来动态构建模块路径。但要注意,动态 import 返回的是一个 Promise,所以我们需要使用 async/await 或者 .then() 进行解决。
结语
以上是 ECMAScript 2020 中的一些主要功能。这些新功能可以帮助开发者写出更加清晰、简洁和高效的代码。希望本篇文章对你有所帮助,也许你可以亲自尝试这些功能来获得更深刻的学习和理解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c6d76dcc0f7239cde38158