ES10(也称为 ECMAScript2019)发布后,添加了一些有趣的新特性,其中 globalThis 肯定是其中之一。globalThis 提供了一种访问全局 this 对象的标准方法,并且可以在不同的环境中使用(比如浏览器和 Node.js)。本文将探讨 globalThis 的使用方法,并提供一些示例代码。
什么是 globalThis
在 JavaScript 中,我们经常需要访问全局的 this 地址。然而,这个全局对象的名称在不同的环境中是不一样的:在浏览器中,它是 window,而在 Node.js 中,它是 global。因此,一种跨平台的标准方法来访问全局 this 对象就变得比较重要了。这就是 globalThis 的作用: 允许我们在任何环境下访问全局 this 对象。
如何使用 globalThis
我们可以通过访问 globalThis 全局变量来获取全局 this 对象,如下所示:
console.log(globalThis);
这将输出全局的 this 对象(也称为顶层对象),其在浏览器中的名称为 window,在 Node.js 中的名称为 global,而在 Web Worker 中的名称为 self。具体取决于执行的运行环境。
下面是一个示例,当在浏览器和 Node.js 中运行时,输出结果分别为 window 和 global:
console.log(globalThis);
globalThis 在模块化代码中的应用
由于 globalThis 提供了一种跨平台的标准方法来访问全局 this 对象,因此它在模块化代码中非常有用。我们可以将需要访问全局 this 对象的代码封装到模块中,并使用 globalThis 在任何环境下访问它们。
例如,我们可能编写了一个示例模块,其中封装了一些代码来检测当前运行环境:
export function detectEnvironment() { if (typeof window !== "undefined") { return "browser"; } else if (typeof global !== "undefined") { return "node"; } else { return "unknown"; } }
然后,我们可以使用 globalThis 将此模块中的代码进行改进,以避免特定于平台的名称:
export function detectEnvironment() { if (typeof globalThis !== "undefined") { // 全局 this 对象可用 if (globalThis.window) { return "browser"; } else if (globalThis.global) { return "node"; } } return "unknown"; }
这样,我们就可以在任何环境下使用这个模块了,而无需担心全局对象的名称。
总结
globalThis 是 ECMAScript 2019 中引入的一个新特性,该特性提供了跨平台访问全局 this 对象的标准方法。使用 globalThis,我们可以避免在不同的环境中写特定于平台的代码,并提高代码的可移植性。有了这个新特性,我们可以更加清晰地编写可重用的模块,让我们在各种 JavaScript 运行环境中编写更具通用性的代码。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65961870eb4cecbf2d9faaef