在 ES2021 中,新增了一个全局对象 globalThis
,它的作用是为了解决在不同的环境下全局对象的不一致性问题。
为什么需要全局对象
在 JavaScript 中,全局对象是一个非常重要的概念。它是在任何地方都可以访问的对象,包括全局变量、全局函数以及内置对象等。在浏览器中,全局对象是 window
,在 Node.js 中,全局对象是 global
。
然而,在不同的环境下,全局对象的名称是不一样的,这就导致了一些问题。比如,在浏览器中,我们可以使用 window
来访问全局对象,但是在 Node.js 中,我们需要使用 global
。这就给跨平台开发带来了一些麻烦。
全局对象的不一致性问题
在不同的环境下,全局对象的名称是不一样的,这就导致了一些问题。比如,在浏览器中,我们可以使用 window
来访问全局对象,但是在 Node.js 中,我们需要使用 global
。这就给跨平台开发带来了一些麻烦。
另外,还有一些情况下,我们需要在不同的环境下执行相同的代码。比如,我们可能会将一些 JavaScript 代码打包成一个库,然后在浏览器和 Node.js 等环境中使用。这就要求我们的代码在不同的环境下能够正确地访问全局对象。
全局对象解决方案:globalThis
为了解决全局对象的不一致性问题,ES2021 新增了一个全局对象 globalThis
。它可以在任何环境下访问全局对象,而无需关心具体的名称。
在浏览器中,我们可以使用以下代码来访问全局对象:
const globalObject = typeof window !== 'undefined' ? window : globalThis;
在 Node.js 中,我们可以使用以下代码来访问全局对象:
const globalObject = typeof global !== 'undefined' ? global : globalThis;
这样,我们就可以在任何环境下访问全局对象了,而无需关心具体的名称。
示例代码
下面是一个简单的示例代码,演示了如何使用 globalThis
来访问全局对象:
// javascriptcn.com 代码示例 // 浏览器中的全局对象是 window console.log(globalThis === window); // true // Node.js 中的全局对象是 global console.log(globalThis === global); // true // 在任何环境下,都可以使用 globalThis 访问全局对象 console.log(globalThis.setTimeout === setTimeout); // true console.log(globalThis.Math === Math); // true
总结
在 ES2021 中,新增了一个全局对象 globalThis
,它的作用是为了解决在不同的环境下全局对象的不一致性问题。使用 globalThis
,我们可以在任何环境下访问全局对象,而无需关心具体的名称。这对于跨平台开发非常有用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657e6b85d2f5e1655d94011f