ES11(也被称为 ES2020)是 JavaScript 的最新版本,于 2020 年 6 月发布。这个版本引入了一些非常有用的新特性,其中之一是全局对象的增强。
在 ES11 中,全局对象(也称为全局命名空间)被扩展为具有更多的属性和方法,这使得开发人员能够更轻松地访问和操作全局作用域。本文将介绍 ES11 中全局对象的增强,包括其新属性和方法以及如何使用它们来提高前端开发效率。
新属性
ES11 引入了两个新的全局对象属性:globalThis 和 BigInt。这些属性可以在全局命名空间中直接访问,无需引用全局对象(如 window 或 global)。
globalThis
globalThis 属性是一个全局对象的引用,可以在任何地方使用。它解决了在不同环境中使用全局对象的问题。在浏览器中,全局对象是 window,而在 Node.js 中,全局对象是 global。使用 globalThis,可以在不同的环境中轻松地访问全局对象。
console.log(globalThis === window); // true console.log(globalThis === global); // false
BigInt
BigInt 属性是一个构造函数,可以用来创建任意精度的整数。在以前的 JavaScript 版本中,整数的最大值是 2^53 - 1,使用 BigInt,可以创建更大的整数。
const x = BigInt(9007199254740991); const y = BigInt(9007199254740991); console.log(x + y); // 18014398509481982n
新方法
ES11 引入了两个新的全局对象方法:Promise.allSettled() 和 String.prototype.matchAll()。这些方法使得在处理异步数据和字符串时更加方便。
Promise.allSettled()
Promise.allSettled() 方法接收一个 Promise 数组,并返回一个 Promise,该 Promise 在所有输入 Promise 都已经解决或拒绝时解决。不同于 Promise.all() 方法,Promise.allSettled() 返回的 Promise 不会在有一个 Promise 被拒绝时立即拒绝,而是会等待所有 Promise 都完成后才返回结果。
// www.javascriptcn.com code example
const promises = [
Promise.resolve(1),
Promise.reject("error"),
Promise.resolve(3)
];
Promise.allSettled(promises)
.then(results => console.log(results));
// [{status: "fulfilled", value: 1},
// {status: "rejected", reason: "error"},
// {status: "fulfilled", value: 3}]String.prototype.matchAll()
String.prototype.matchAll() 方法返回一个迭代器,用于遍历字符串中所有匹配正则表达式的子字符串。它返回的迭代器包含每个匹配的详细信息,例如匹配的字符串、匹配的索引和捕获组。
const str = "Hello 123 world 456";
const regex = /\d+/g;
for (const match of str.matchAll(regex)) {
console.log(match);
}
// ["123", index: 6, input: "Hello 123 world 456", groups: undefined]
// ["456", index: 17, input: "Hello 123 world 456", groups: undefined]指导意义
ES11 的全局对象增强使得前端开发更加方便,特别是在处理异步数据和字符串时。使用 Promise.allSettled() 方法可以更好地处理 Promise 数组,并且不会因为一个 Promise 的拒绝而中断整个处理过程。使用 String.prototype.matchAll() 方法可以更方便地提取字符串中的数据,而不需要手动编写循环或正则表达式。
但是,在使用新特性时,需要注意浏览器和 Node.js 的兼容性。如果需要在旧版本的浏览器或 Node.js 中运行代码,可能需要使用 polyfill 或转译工具。
总之,ES11 的全局对象增强使得前端开发更加方便和高效。我们应该尽可能地使用这些新特性,以提高我们的开发效率和代码质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d51302a941bf7134964b76