前言
在 JavaScript 中,全局对象是一个重要的概念,它是指在任何上下文中都可以访问到的对象。在浏览器中,全局对象是 window 对象;在 Node.js 中,全局对象是 global 对象。然而,这种方式会导致在不同的运行环境中需要编写不同的代码,为了解决这个问题,ES11 引入了一个新的全局对象 globalThis,本文将详细介绍 globalThis 的应用方式。
什么是 globalThis
globalThis 是 ES11 引入的新的全局对象,它可以在任何的运行环境中访问到,包括浏览器、Node.js 等。
在之前的 JavaScript 版本中,全局对象在不同的运行环境中是不同的,这就导致了在不同的环境中需要编写不同的代码,而 globalThis 的引入解决了这个问题,我们可以使用 globalThis 来访问全局对象,而不需要关心当前运行环境是什么。
globalThis 的应用方式
1. 获取全局对象
使用 globalThis 可以获取到全局对象,不需要关心当前运行环境是什么。
console.log(globalThis); // 在浏览器中输出 window 对象,在 Node.js 中输出 global 对象
2. 获取全局对象中的属性
使用 globalThis 可以获取到全局对象中的属性,不需要关心当前运行环境是什么。
console.log(globalThis.parseInt === parseInt); // true
3. 在全局对象中定义属性
使用 globalThis 可以在全局对象中定义属性,不需要关心当前运行环境是什么。
globalThis.test = 'hello world'; console.log(test); // 'hello world'
4. 异步操作的全局对象
由于异步操作的代码可能运行在不同的上下文中,因此需要一个全局对象来统一管理异步操作相关的内容,globalThis 就可以扮演这个角色。
// javascriptcn.com 代码示例 // 定义异步操作的全局对象 globalThis.asyncStorage = { getItem(key) { return new Promise((resolve) => { setTimeout(() => { resolve(localStorage.getItem(key)); }, 1000); }); }, setItem(key, value) { return new Promise((resolve) => { setTimeout(() => { localStorage.setItem(key, value); resolve(); }, 1000); }); } }; // 使用异步操作的全局对象 async function test() { await asyncStorage.setItem('test', 'hello world'); const result = await asyncStorage.getItem('test'); console.log(result); // 'hello world' }
总结
globalThis 是 ES11 引入的新的全局对象,它可以在任何的运行环境中访问到,包括浏览器、Node.js 等。使用 globalThis 可以获取全局对象、获取全局对象中的属性、在全局对象中定义属性、管理异步操作相关的内容等。globalThis 的引入解决了在不同的环境中需要编写不同的代码的问题,使得代码更加通用和易于维护。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6554c039d2f5e1655de97d66