在 ECMAScript 2021 中,新增了一个名为 globalThis
的全局对象。这个对象在浏览器和 Node.js 中都可以访问到,并且它是一个可以跨平台使用的全局对象。本文将详细介绍 globalThis
对象的特性和应用场景。
globalThis 对象的特性
在之前的 JavaScript 版本中,获取全局对象有多种方式,如在浏览器中可以使用 window
,在 Node.js 中可以使用 global
。但是这些方式只适用于特定的平台,而 globalThis
则是一个通用的跨平台全局对象。
globalThis
对象的属性和方法如下:
globalThis.console
: 用于在控制台输出信息的对象。globalThis.setTimeout
: 用于设置定时器的方法。globalThis.setInterval
: 用于设置间隔定时器的方法。globalThis.fetch
: 用于发送网络请求的方法。globalThis.Promise
: 用于处理异步操作的对象。globalThis.Math
: 用于执行数学运算的对象。globalThis.JSON
: 用于处理 JSON 格式数据的对象。globalThis.RegExp
: 用于处理正则表达式的对象。
需要注意的是,globalThis
对象的属性和方法可能会因为环境的不同而有所不同,因此在使用时需要进行判断。
globalThis 对象的应用场景
在跨平台的代码中使用
由于 globalThis
对象可以在浏览器和 Node.js 中使用,因此在编写跨平台的代码时,可以使用 globalThis
来获取全局对象,这样就可以保证代码在不同的平台中都能够正常运行。
在模块化的代码中使用
在模块化的代码中,为了避免命名冲突和全局变量的污染,通常会将变量作为模块的私有变量来使用。但是有些情况下,需要将变量暴露给全局作用域,此时可以使用 globalThis
来获取全局对象。
例如,在 Node.js 中,可以使用以下代码将变量暴露给全局作用域:
globalThis.myVar = 'Hello, World!';
在浏览器中,可以使用以下代码将变量暴露给全局作用域:
window.myVar = 'Hello, World!';
使用 globalThis
可以避免在不同平台中使用不同的全局对象。
示例代码
以下是一个使用 globalThis
的示例代码,它可以在浏览器和 Node.js 中都能够正常运行:
// 获取全局对象 const globalObj = typeof window !== 'undefined' ? window : globalThis; // 设置全局变量 globalObj.myVar = 'Hello, World!'; // 输出全局变量 console.log(globalObj.myVar);
在这个示例代码中,我们先通过判断环境来获取全局对象,然后使用 globalObj
来设置和输出全局变量。由于我们使用了 globalThis
,因此这个代码可以在不同平台中都能够正常运行。
总结
globalThis
是 ECMAScript 2021 中新增的一个全局对象,它可以跨平台使用,并且可以避免在不同平台中使用不同的全局对象。在编写跨平台的代码或模块化的代码时,可以使用 globalThis
来获取全局对象,这样可以保证代码在不同的平台中都能够正常运行。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66122cd1d10417a2222c53a4