在 ECMAScript 2020 中,新增了一个全局命名空间对象 globalThis
,它是一个全局变量,提供了当前环境下最顶层对象的引用,可以在任何地方访问到它。
简介
在之前的 ECMAScript 规范中,存在多种方式来访问全局对象,比如浏览器环境下可以使用 window
或者 self
,在 Node.js 中可以使用 global
。但是在不同的环境中,访问顶层对象的方式不统一,这使得一些跨平台的代码需要不同的实现方式,增加了维护成本。
为了解决这个问题,ECMAScript 2020 引入了 globalThis
,它是唯一一个可以从任何执行上下文中获取全局对象的标准方法,包括浏览器中的窗口对象,Web Worker 中的 global 对象,Node.js 中的 global 对象等。
深入了解
globalThis
是一个可访问的全局属性。在全局作用域中,可以使用以下方式访问它:
console.log(globalThis);
在浏览器中,这个全局属性将指向 window
对象。在 Node.js 中,它将指向 global
对象。在 Web Worker 中,它将指向 WorkerGlobalScope
对象。
而在严格模式下的函数内部,globalThis
的值为 undefined
。这是因为在严格模式中,全局对象不可用,为了确保不会意外访问它,ECMAScript 2020 规定在严格模式下访问 globalThis
会抛出一个 ReferenceError
错误。
在跨平台的开发中,使用 globalThis
作为全局对象的引用可以更好的解决代码的兼容性问题。例如,假设我们要在一个函数中判断当前的执行环境是否支持 Promise:
if (typeof globalThis.Promise !== 'undefined') { // 当前环境支持 Promise } else { // 当前环境不支持 Promise }
示例代码
下面的示例代码展示了使用 globalThis
访问全局对象的过程:
// 在浏览器中 console.log(globalThis === window); // true console.log(globalThis.Array === window.Array); // true // 在 Node.js 中 console.log(globalThis === global); // true console.log(globalThis.process === global.process); // true
总结
globalThis
是 ECMAScript 2020 中新增的全局命名空间,它可以从任何执行上下文中获取全局对象,避免了跨平台开发中的兼容性问题。只有在严格模式下访问 globalThis
时,会抛出一个 ReferenceError
错误。
我们希望本文能对 globalThis
的概念和用法有一个更深入的了解,使您在开发中能够更好地使用它。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e6e7a9f6b2d6eab323e14d