每个 JavaScript 环境都有一个 全局对象。在全局范围内创建的任何变量实际上都是这个对象的属性,任何函数都是它的方法。在浏览器环境中,全局对象是 window
对象,它表示包含网页的浏览器窗口。
在本文中,我们将介绍 Window 对象的一些重要用途:
-浏览器对象模型
浏览器对象模型(或简称 BOM)是包含有关浏览器和计算机屏幕信息的属性和方法的集合。例如,我们可以找出正在使用哪个浏览器查看页面(尽管这种方法不可靠)。我们还可以找出查看它的屏幕尺寸,以及在当前页面之前访问过哪些页面。如果您讨厌用户,它也可以用于创建弹出窗口的相当可疑的做法。
BOM 没有官方标准,尽管所有主要浏览器都支持许多属性和方法,从而形成了一种事实上的标准。这些属性和方法可通过 window
对象获得。每个浏览器窗口、选项卡、弹出窗口、框架和 iframe 都有一个 window
对象。
请记住,JavaScript 可以在不同的环境中运行。BOM 仅在浏览器环境中才有意义。这意味着其他环境(例如 Node.js)可能没有 window
对象,尽管它们仍然有一个全局对象;例如,Node.js 有一个名为 global
.
如果不知道全局对象的名称,也可以 this
在全局范围内使用关键字来引用。以下代码提供了一种将变量分配给 global
全局对象的快速方法:
const global = this;
全局变量是不使用const
, let
或 var
关键字创建的变量。可以在程序的所有部分访问全局变量。
全局变量是全局对象的实际属性。在浏览器环境中,全局对象就是 window
对象。这意味着创建的任何全局变量实际上都是 window
对象的属性,如下例所示:
x = 6;window.x
// 6
一般来说,你应该在不使用 window
对象的情况下引用全局变量;它的输入更少,您的代码将在环境之间更具可移植性。一个例外是如果您需要检查是否已定义全局变量。例如,如果 x
尚未定义,以下代码将抛出 ReferenceError:
if (x) {}
但是,如果变量作为window
对象的属性被访问,那么代码仍然可以工作,就像 window.x
简单地 return 一样false
,这意味着代码块不会被评估:
if (window.x) {
}
我们已经遇到的一些函数,例如 parseInt()
and isNaN()
,实际上是全局对象的方法,在浏览器环境中,它们使它们成为 window
对象的方法:
像变量一样,习惯上省略通过 window
对象访问它们。
在浏览器中生成对话框的函数有 3 个alert()
: confirm()
和 prompt()
。这些不是 ECMAScript 标准的一部分,尽管所有主流浏览器都支持它们作为 window
对象的方法。