Javascript中的窗口,屏幕和文档有什么区别?


242

我看到这些术语可以互换使用,作为DOM的全局环境。有什么区别(如果有的话),什么时候应该使用每一个?

Answers:


248

Windowglobal object浏览器中主要的JavaScript对象根(也称为),也可以视为文档对象模型的根。您可以通过以下方式访问window

window.screen或者只是screen有关物理屏幕尺寸的小信息对象。

window.document或仅仅document是潜在可见(或更好:呈现)的文档对象模型/ DOM的主要对象。

由于window是全局对象,因此您可以仅使用属性名称来引用它的任何属性-因此您不必写下来window.-它会在运行时确定。


46
文档可以大于窗口-窗口是浏览器中的“可见”部分。
Mandy 2014年

1
如果@mandy不是文档的一部分,则不可见。您可以创建将窗口完全不可见的iframe,除非将iframe附加到文档上
Peter Aron Zentai

27
从@Mandy注释混淆window视口。A window是浏览器标签的JavaScript对象或<iframe>(或已弃用<frame>)。该视口是所渲染的矩形document看到的标签或框架内。
贝内特·布朗

2
window.document或文件一直都一样吗?
BOZ

2
由于window是全局对象-可以访问它的每个属性/方法而无需实际写下[window。],因此window.document可以写为只是文档,当然,它指向的是相同的东西-属性本身是相同的,只是引用了多种方式。
彼得·阿隆·曾泰

101

好吧,窗口是首先加载到浏览器中的东西。此窗口对象具有大多数属性,如length,innerWidth,innerHeight,name,是否已关闭,其父级等等。

那文档对象呢?该文档对象是您的html,aspx,php或其他将加载到浏览器中的文档。该文档实际上被加载到window对象内部,并且具有可用的属性,例如标题,URL,cookie等。这实际上是什么意思?这意味着,如果要访问窗口的属性,则为window.property,如果为文档,则为window.document.property,也可以简称为document.property。

多姆

这似乎很简单。但是,一旦引入IFRAME,会发生什么?

iframe


14
对尝试学习基础知识的人造成误导:“文档对象是您的html,aspx,php或其他将加载到浏览器中的文档。” 浏览器呈现HTML和CSS并执行JavaScript。浏览器看不到具有服务器端语言(如PHP)的文件。
贝内特·布朗

这实在是更好地理解很有帮助的解释,接着画面..
法里斯Rayhan的

49

简要地说,下面有更多详细信息,

  • window 是该上下文的JavaScript的执行上下文和全局对象
  • document 包含通过解析HTML初始化的DOM
  • screen 描述物理显示器的全屏

有关这些对象的详细信息,请参见W3CMozilla参考。这三个之间最基本的关系是,每个浏览器选项卡都有自己的window,并且window具有window.documentwindow.screen属性。浏览器选项卡window是全局上下文,因此documentscreen指代window.documentwindow.screen。有关这三个对象的更多详细信息,请参见Flanagan的JavaScript:权威指南

window

每个浏览器选项卡都有其自己的顶级window对象。每个<iframe>(和不推荐使用的<frame>)元素也都有自己的window对象,它们嵌套在父窗口中。这些窗口中的每一个都有自己的单独全局对象。window.window总是指window,但window.parentwindow.top可能指封闭的窗口,从而可以访问其他执行上下文。除了documentscreen下面所描述的,window属性包括

  • setTimeout()并将setInterval()事件处理程序绑定到计时器
  • location 提供当前网址
  • history方法,back()forward()提供标签的可变历史记录
  • navigator 描述浏览器软件

document

每个window对象都有一个document要渲染的对象。这些对象之所以会造成混乱,部分原因是当分配了唯一ID时,会将HTML元素添加到了全局对象中。例如,在HTML代码段中

<body>
  <p id="holyCow"> This is the first paragraph.</p>
</body>

段落元素可以被以下任何一种引用:

  • window.holyCow 要么 window["holyCow"]
  • document.getElementById("holyCow")
  • document.body.firstChild
  • document.body.children[0]

screen

window对象还有一个screen对象,该对象的属性描述了物理显示:

  • 屏幕属性widthheight全屏

  • 屏幕属性availWidthavailHeight省略工具栏

屏幕上显示呈现的文档的部分是JavaScript中的视口,这可能会造成混淆,因为在谈论与操作系统的交互时,我们将应用程序的屏幕部分称为窗口。的getBoundingClientRect()任何的方法,document元件将返回一个对象与topleftbottom,和right描述在视口中的元件的位置的特性。


window.onload使用文档对象?的等效指令。
FilipeCanatto


48

window是实际的全局对象。

screen是在屏幕上,它包含了用户的显示性能。

document是在DOM是。


11
document也可以是window.documentscreen可以是window.screenwindow可以是window.window(或window.window.window):-P
Rocket Hazmat 2012年

6
@PeterAronZentai:那是因为window是全局变量,这使其成为全局window对象的属性。:-)
火箭Hazmat 2012年

1
我需要用ajax打开一个新页面,我想用新页面替换整个当前页面。我应该使用$(document).load(page); 或$(window).load(page); ?
马丁AJ

11

window包含一切,所以你可以打电话window.screenwindow.document得到这些元素。查看这个小提琴,漂亮地打印每个对象的内容:http : //jsfiddle.net/JKirchartz/82rZu/

您还可以在firebug / dev工具中查看对象的内容,如下所示:

console.dir(window);
console.dir(document);
console.dir(screen);

window是一切的根源,screen只是具有屏幕尺寸,并且document是顶级DOM对象。因此您可以将其视为window超级document...


1

窗口是加载到浏览器中的第一件事。此窗口对象具有大多数属性,如length,innerWidth,innerHeight,name,是否已关闭,其父级等等。

该文档对象是您的html,aspx,php或其他将加载到浏览器中的文档。该文档实际上已加载到window对象内部,并且具有可用的属性,例如标题,URL,cookie等。这实际上是什么意思?这意味着如果要访问窗口的属性是window.property,如果是文档,则是window.document.property,也可以简称为document.property。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.