我看到这些术语可以互换用作 DOM 的全局环境。有什么区别(如果有的话),我应该什么时候使用每一种?
JavaScript 中的窗口、屏幕和文档有什么区别?
Window
是主要的 JavaScript 对象根,也就是global object
浏览器中的根,也可以将其视为文档对象模型的根。您可以以window
.
window.screen
或者只是screen
一个关于物理屏幕尺寸的小信息对象。
window.document
或者只是document
潜在可见(或更好的是:渲染)文档对象模型/DOM 的主要对象。
由于window
是全局对象,因此您可以仅使用属性名称来引用它的任何属性——因此您不必写下来window.
——它将由运行时计算出来。
好吧,窗口是加载到浏览器中的第一件事。此窗口对象具有大部分属性,如长度、内部宽度、内部高度、名称(如果已关闭)、其父项等。
那么文档对象呢?文档对象是您的 html、aspx、php 或将加载到浏览器中的其他文档。该文档实际上被加载到 window 对象中,并具有可用的属性,如标题、URL、cookie 等。这到底是什么意思?这意味着如果您想访问窗口的属性,则它是 window.property,如果它是文档,则它是 window.document.property,它也可以简称为 document.property。
这似乎很简单。但是一旦引入了 IFRAME 会发生什么?
简而言之,下面有更多详细信息,
window
是该上下文的 JavaScript 的执行上下文和全局对象document
包含通过解析 HTML 初始化的 DOMscreen
描述物理显示器的全屏
有关这些对象的详细信息,请参阅W3C和Mozilla参考资料。三者之间最基本的关系是每个浏览器标签都有自己的window
,并且window
具有window.document
和window.screen
性能。浏览器选项卡的window
是全球范围内,所以document
并screen
请参阅window.document
和window.screen
。下面是关于这三个对象的更多详细信息,遵循Flanagan 的 JavaScript:权威指南。
window
每个浏览器选项卡都有自己的顶级window
对象。每个<iframe>
(和已弃用的<frame>
)元素也有自己的window
对象,嵌套在父窗口中。这些窗口中的每一个都有自己单独的全局对象。window.window
总是指window
,但window.parent
也window.top
可能指封闭窗口,允许访问其他执行上下文。除了document
和screen
下面所描述的,window
属性包括
setTimeout()
并将setInterval()
事件处理程序绑定到计时器location
给出当前 URLhistory
使用方法back()
并forward()
提供选项卡的可变历史记录navigator
描述浏览器软件
document
每个window
对象都有一个document
要渲染的对象。这些对象之所以会混淆,部分原因是 HTML 元素在分配唯一 id 时被添加到全局对象中。例如,在 HTML 片段中
<body>
<p id="holyCow"> This is the first paragraph.</p>
</body>
段落元素可以被以下任何一个引用:
window.holyCow
或者window["holyCow"]
document.getElementById("holyCow")
document.querySelector("#holyCow")
document.body.firstChild
document.body.children[0]
screen
该window
对象还有一个screen
具有描述物理显示属性的对象:
屏幕属性
width
和height
全屏屏幕属性
availWidth
并availHeight
省略工具栏
显示渲染文档的屏幕部分是JavaScript 中的视口,这可能会令人困惑,因为在谈论与操作系统的交互时,我们将应用程序的屏幕部分称为窗口。的getBoundingClientRect()
任何的方法,document
元件将返回一个对象与top
,left
,bottom
,和right
描述在视口中的元件的位置的特性。
的window
是实际的全局对象。
的screen
是在屏幕上,它包含了用户的显示性能。
这document
是 DOM 所在的位置。
该window
包含一切,所以你可以打电话window.screen
和window.document
得到这些元素。看看这个小提琴,漂亮地打印每个对象的内容:http : //jsfiddle.net/JKirchartz/82rZu/
您还可以在Firebug /development 工具中查看对象的内容,如下所示:
console.dir(window);
console.dir(document);
console.dir(screen);
window
是一切的根,screen
只有屏幕尺寸,并且document
是顶级 DOM 对象。所以你可以把它想象成window
一个超级document
...