JavaScript 环境的新附加元素:ES11 中的 globalThis

阅读时长 4 分钟读完

在 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 有以下优势:

  1. 具有更好的可移植性

在 Node.js 中,我们没有办法直接访问 window 对象,因为它不存在。相反,我们需要使用 global。而 globalThis 可以在任何运行 JavaScript 的环境中使用,因为它代表的是当前执行环境中的全局对象。

  1. 允许您以更少的代码进行访问

早期的全局对象的名称因环境而异,而 globalThis 的名称是在所有 JavaScript 环境中都相同的。因此,我们不需要针对不同环境编写特定的代码,因为 globalThis 可以在任何地方使用。

globalThis 在实际开发中的应用

访问全局变量

使用 globalThis 可以方便地访问全局变量,不论在什么环境中。

跨域通信

使用 postMessage 可以实现跨域通信,但需要知道传输消息的窗口对象。使用 globalThis 可以简化这个问题,因为它代表全局对象,可以在任何可发起 postMessage 的地方使用。

处理多个窗口或多个 Worker 的结果

如果您需要从多个窗口或多个 Worker 中获取结果,可以将这些结果存储在全局对象中,然后使用 globalThis 访问这些结果以进行处理。

-- -------------------- ---- -------
-- -------------
--- ------ ------

-- -----------
--------------------- - -------- ------ -
  -- -------- -
    ----- - -----
  - ---- -- -------- -
    ----- - -----
    -- ----------------
    ------ ----------------------
    ------------------ -------
  -
--

-- -----------
--- ------- - --- ---------------------
--- ------- - --- ---------------------

-----------------------------
-----------------------------

总结

ES11 中的 globalThis 给 JavaScript 开发者带来了更好的可移植性以及简洁性。无论在浏览器还是在 Node.js 环境中,我们都可以方便地使用 globalThis 访问全局对象,更加便捷地实现我们的开发需求。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6466ed7d968c7c53b0757ab8

纠错
反馈