全局对象是 JavaScript 中非常重要的一个概念,它包含了在任何地方都可以访问的全局性定义的属性。在 JavaScript 解释器启动后或者每次加载新页面时,都会创建一个全局对象,并为其添加一组初始的属性。这些属性包括:
- 全局常量,如 undefined、Infinity 和 NaN。
- 全局函数,如 isNaN()、parseInt()、eval() 等。
- 构造函数,如 Date、RegExp、String、Object 和 Array。
- 全局对象,如 Math 和 JSON。
虽然全局对象的初始属性并不是 JavaScript 的保留字,但它们应该被视为保留字,因为它们在任何地方都可以被使用。
在 Node.js 中,全局对象有一个名为 global 的属性,它引用了全局对象本身,因此在 Node.js 程序中可以通过 global 来引用全局对象。
在浏览器中,Window 对象充当了全局对象的角色,它定义了核心全局属性,同时也定义了一些特定于浏览器和客户端 JavaScript 的全局值。每个浏览器窗口都有自己的 Window 对象,并且 window 属性指向了该对象。
值得注意的是,工作线程中的代码拥有自己的全局对象,不同于 Window 对象。在工作线程中,可以通过 self 来引用它们的全局对象。
最近,ES2020 定义了 globalThis,作为在任何上下文中引用全局对象的标准方式。这个特性已经在现代浏览器和 Node.js 中实现。