ES10 中的全局对象 globalThis

阅读时长 4 分钟读完

随着 JavaScript 语言不断的发展和演进,越来越多的特性和语法得到不断的引入和支持,其中全局对象(Global Object)是一个非常重要且常用的概念,而在 ES10 中,新增了一个全局对象 globalThis,用于解决跨平台,跨环境下,获取全局对象的问题。

什么是全局对象

全局对象是指在任何位置都可以访问到的对象,在浏览器中,全局对象就是 window 对象,而在 Node.js 环境下,全局对象就是 global 对象,这些都是大家非常熟悉的。全局对象提供了很多常用的方法和属性,如 setTimeout、setInterval、Math 等等。

为什么需要全局对象 globalThis

在今天的开发中,我们经常会遇到跨平台、跨环境等问题,比如我们在页面中通过 iframe 引入第三方库,第三方库中也需要使用全局对象,但是它在不同平台和环境中的名字并不一样,如:

  • 浏览器中为 window
  • Node.js 中为 global
  • Web Worker 中为 self
  • Service Worker 中为 self
  • iframe 中为 window

这样的话,我们在不同的环境中使用相同的代码时,需要手动判断当前环境使用哪个全局对象,这会导致我们的代码非常繁琐,而全局对象 globalThis 就是为了解决这个问题的。

如何使用全局对象 globalThis

我们可以通过以下方式来获取全局对象 globalThis:

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

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

我们可以看到,在获取 globalThis 这个全局对象时,首先判断了 self、window、global 几个对象是否存在,最终通过 getGlobal 函数获取正确的全局对象。

我们还可以通过以下方式来检测当前代码是否运行在全局对象 globalThis 中:

示例代码

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

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

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

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

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

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

总结

全局对象是 JavaScript 开发中非常常见的概念,而全局对象 globalThis 的出现,解决了跨平台、跨环境下获取全局对象的问题,也大大简化了开发者的代码编写。

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

纠错
反馈