在 JavaScript 中,global 对象代表了全局的作用域。不过,这个对象的名称在不同的环境中是不同的。比如,在浏览器端,这个对象的名称是 window,在 Node.js 环境下则是 global。而在 ES11 中,我们终于可以通过 globalThis 来访问全局对象了,无论是在浏览器还是在 Node.js 环境中。
globalThis 是什么?
globalThis 是一个 ES11 中的新附加元素,它是一个全局对象,可以通过它来访问全局作用域。不论在任何环境中,通过 globalThis 都可以访问到全局对象,不需要担心环境不同而导致代码失效的问题。
在之前的 JavaScript 中,我们要访问全局变量时需要使用 window 或 global,这样做就导致了代码在不同环境下的不兼容性。而 ES11 中的 globalThis 可以解决这个问题,让我们能够编写更具通用性的代码。
globalThis 和旧有的对象有何区别?
ES11 中的 globalThis 和旧有的全局对象(如 window 和 global)在本质上是相同的,他们都是维护全局状态和变量的容器。但是,globalThis 有以下优势:
- 具有更好的可移植性
在 Node.js 中,我们没有办法直接访问 window 对象,因为它不存在。相反,我们需要使用 global。而 globalThis 可以在任何运行 JavaScript 的环境中使用,因为它代表的是当前执行环境中的全局对象。
- 允许您以更少的代码进行访问
早期的全局对象的名称因环境而异,而 globalThis 的名称是在所有 JavaScript 环境中都相同的。因此,我们不需要针对不同环境编写特定的代码,因为 globalThis 可以在任何地方使用。
globalThis 在实际开发中的应用
访问全局变量
使用 globalThis 可以方便地访问全局变量,不论在什么环境中。
// 定义全局变量 a globalThis.a = 1; // 访问全局变量 a console.log(globalThis.a); // 输出:1
跨域通信
使用 postMessage 可以实现跨域通信,但需要知道传输消息的窗口对象。使用 globalThis 可以简化这个问题,因为它代表全局对象,可以在任何可发起 postMessage 的地方使用。
// 向其他窗口发送消息 globalThis.postMessage("Hello, world!", "*");
处理多个窗口或多个 Worker 的结果
如果您需要从多个窗口或多个 Worker 中获取结果,可以将这些结果存储在全局对象中,然后使用 globalThis 访问这些结果以进行处理。
-- -------------------- ---- ------- -- ------------- --- ------ ------ -- ----------- --------------------- - -------- ------ - -- -------- - ----- - ----- - ---- -- -------- - ----- - ----- -- ---------------- ------ ---------------------- ------------------ ------- - -- -- ----------- --- ------- - --- --------------------- --- ------- - --- --------------------- ----------------------------- -----------------------------
总结
ES11 中的 globalThis 给 JavaScript 开发者带来了更好的可移植性以及简洁性。无论在浏览器还是在 Node.js 环境中,我们都可以方便地使用 globalThis 访问全局对象,更加便捷地实现我们的开发需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6466ed7d968c7c53b0757ab8