ES11 新增的 globalThis 对象探究

阅读时长 4 分钟读完

在前端开发中,我们经常需要使用全局对象,比如 window 对象在浏览器环境中负责管理全局作用域。然而,由于不同的 JS 运行环境,全局对象的名称不同,如在 Node.js 环境中,全局对象为 global。这就给开发者带来了不便,尤其是需要跨平台编写代码的情况下。为了解决这个问题,ES11 新增了一个全局对象 globalThis

globalThis 对象是什么?

globalThis 在 ES11 中被定义为一个全局对象,它可以在任何地方(全局作用域和函数作用域中)使用,其属性和方法对于任何 JS 运行环境都是一致的。在浏览器环境下,它指向的就是 window 对象,在 Node.js 环境中,它指向的就是 global 对象。

当我们在全局和函数作用域中都需要使用全局变量或对象时,我们可以使用 globalThis 来代替具体的全局对象,从而提高代码的可移植性,例如:

globalThis 对象的示例

在实践中,我们可以使用 globalThis 对象来执行一些 JS 运行环境通用的操作。

判断环境

有时候,我们需要根据代码运行的环境来做出一些不同的处理,比如在浏览器环境中,我们需要在 DOMContentLoaded 事件触发后再执行我们的代码,而在 Node.js 环境中,则没有这个事件。这时,我们可以使用 globalThis 对象来判断环境。

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

跨平台调用

假设我们要在浏览器环境中调用 Node.js 模块中的方法,或者在 Node.js 环境中调用浏览器中的 API,我们可以使用 globalThis 对象来解决这个问题。

如何使用 globalThis?

在编写代码时,我们可以直接使用 globalThis 和具体的全局对象进行比较,例如:

同时,我们可以使用 Object.is() 方法进行比较,代码如下:

总结

globalThis 对象是 ES11 新增的一个全局对象,用于解决跨平台编写代码时,全局对象名称不一致的问题。任何 JS 运行环境都可以使用 globalThis 对象来进行操作,提高了代码的可移植性。我们可以通过比较 globalThis 和具体的全局对象来判断当前代码运行的环境,同时也可以使用 globalThis 进行跨平台调用。在实际开发中,我们应该充分利用 globalThis 对象,提高代码的可维护性和可移植性。

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

纠错
反馈