ES2020 带来了一些有趣的新功能,其中包括全新的全局对象 globalThis
。在过去,开发人员必须根据他们所处的环境使用不同的全局对象,例如 window
、self
、global
或 this
。而 globalThis
为解决这种问题而来,它可以在任何环境下都找到全局对象。
什么是全局对象?
全局对象是 JavaScript 运行环境提供的顶层对象。它可以包含许多可用的方法和属性(如全局变量),并且可以从任何地方访问它们。在浏览器中,全局对象通常是 window
;在 Node.js 中,则是 global
。
全局对象的问题
虽然全局对象非常有用,但它在跨平台应用程序中会有问题。在一些特殊的情况下,全局对象可能不同。例如,如果您正在编写既可在浏览器上运行又可在 Node.js 上运行的代码,则必须选择使用预定义的全局对象,或者在代码中使用条件语句进行选择。
globalThis 的诞生
为了避免跨平台应用程序中出现的全局对象问题,ES2020 引入了新的全局对象 globalThis
。globalThis
是在全局作用域中定义的全局属性,它总是引用全局对象。无论在任何环境下,都可以使用 globalThis
访问全局作用域。
globalThis 的用途
globalThis
很有用,因为它可以帮助您跨多个环境编写代码,而无需考虑全局对象的不同。这使得在浏览器上运行的脚本能够在 Node.js 中工作,并且在不同的 JavaScript 环境中传递代码时也不易出错。
下面是一个示例,演示如何使用 globalThis
在不同的环境中运行相同的代码:
// 获取全局对象 const global = globalThis; // 您可以在 Node.js 或浏览器中运行此代码 global.setTimeout(() => { console.log('Hello world!'); }, 1000);
其他使用场景
除了跨平台编写外,globalThis
还可以用于动态访问全局对象。例如,您可以在代码中调用一个不知道其宿主环境的函数。globalThis
可以帮助您在任何情况下找到所需的全局对象。
总结
globalThis
是 ES2020 为了解决全局对象存在的问题引入的新的全局对象。使用 globalThis
可以帮助您跨平台编写代码且不必担心全局对象的不同,也可以在不知道宿主环境的情况下查找全局对象。随着 JavaScript 应用程序变得越来越复杂,使用 globalThis
可以让开发人员更轻松地编写可靠的代码。
如果您发现自己需要在多个 JavaScript 环境中编写代码,建议使用 globalThis
以提高代码的可移植性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645761d5968c7c53b0a1b776