ES11 中为什么需要增加一个全局对象 globalThis

阅读时长 4 分钟读完

在 JavaScript 中,许多对象依赖于上下文环境来确定其行为,例如在浏览器中的 window 对象或在 Node.js 环境中的 global 对象。在大多数情况下,这些对象是可以通过其他方式轻松地获取到的,但是当代码需要跨平台或运行在多个环境中时,由此带来的问题就会变得特别突出。

在 ES11 中,引入了一个新的全局对象 globalThis ,它提供了一种跨平台的访问全局对象的方法,并且可以更好地解决跨环境问题。

在不同环境下的全局对象

在浏览器中,全局对象通常是 window 对象,因为浏览器中的 JavaScript 运行在一个名为 window 的全局对象中。而在 Node.js 环境中,全局对象通常是 global 对象。

然而,这种依赖于不同运行时环境的写法带来了许多问题。例如,如果你在一个库中正在开发一个函数,需要兼容不同的运行时环境,那么你可能会写这样的代码:

这段代码需要检测当前环境中存在的全局对象,并根据结果进行相应的处理。如果你的代码需要兼容多个平台,那么这个过程会变得非常繁琐。

globalThis 的解决方案

新的全局对象 globalThis 提供了一种统一的跨平台访问方式,不再需要进行诸如上面的条件判断了。在任何平台上,只需调用 globalThis 对象即可访问全局对象。

注意,在浏览器中,globalThis 等价于 window 。

而在诸如 Node.js 等其他平台中,globalThis 会指向当前全局对象(即 global )。

这就意味着,不管你的代码运行在哪个平台,你都可以使用 globalThis 对象来访问全局对象,而不用担心兼容性问题。

示例代码

下面是一些使用 globalThis 的示例代码,它们在不同平台上均能正常运行:

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

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

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

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

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

结论

ES11 中新增的全局对象 globalThis,提供了一种跨平台访问全局对象的方法,解决了这个问题带来的不方便以及兼容性问题。它可以使开发者更加专注于逻辑实现,减少了代码冗余和繁琐的条件判断。无论是在浏览器端还是 Node.js 环境,都可以更方便地访问全局对象,提高开发效率和质量。

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

纠错
反馈