ES11 中的 GlobalThis 和 Window 对象有什么区别

阅读时长 3 分钟读完

在 JavaScript 中,全局变量以及函数都被定义在全局对象(Global Object)中。每个环境(浏览器、Node.js 等)拥有自己的全局对象。在 ES11 中,新增了一个全局对象:GlobalThis。那么 GlobalThis 和 Window 对象有什么区别呢?本文将详细解释它们之间的差别,并提供相关的示例代码。

GlobalThis 和 Window 对象的区别

  1. 作用范围不同:GlobalThis 对象在任何环境中都是全局对象,也就是说,在浏览器和 Node.js 等环境中都能使用它。而 Window 对象仅在浏览器环境中有效。
  2. 命名规范不同:GlobalThis 没有直接访问的方式,需要使用该环境中的 this 或者 globalThis 来间接访问。而 Window 对象能够直接在浏览器中访问,且在浏览器中默认使用 window 关键字进行访问。
  3. 全局性质不同:GlobalThis 是一个内置的全局对象,而 Window 对象是一个由特定的运行环境提供的全局对象。

GlobalThis 和 Window 对象的使用场景

  1. 在 JavaScript 中,实现跨平台的全局变量以及函数需要使用 GlobalThis。这是因为它可以在所有环境中都使用,而 Window 对象仅在浏览器环境中有效。
  2. 如果需要在浏览器中访问全局对象,使用 Window 对象更为方便。

示例代码

在浏览器和 Node.js 环境中运行以下代码,分别输出 GlobalThis 和 Window 对象,以及它们的类型。

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

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

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

总结

GlobalThis 和 Window 对象虽然都是全局对象,但它们的作用范围、命名规范以及全局性质不同。在 JavaScript 中,使用 GlobalThis 可以实现跨平台的全局变量和函数,并且可以在任何环境中使用。而在浏览器中,Window 对象则是默认的全局对象,便于访问和使用。

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

纠错
反馈