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

问题描述:

我看到这些术语可以互换使用,作为DOM的全球环境。有什么区别(如果有的话),我应该什么时候使用每一个?Javascript中的窗口,屏幕和文档有什么区别?

Window是主要的JavaScript对象根,也就是浏览器中的全局对象,也可以看作是文档对象模型的根。您可以在大多数情况下(在浏览器中)以window的身份访问它;

window.screen是关于物理屏幕尺寸的小型信息对象。

window.document或只是document是可见(或更好的:已渲染)文档对象模型/ DOM的主要对象。

+26

文档可以大于窗口 - 窗口是浏览器中的“可见”部分。 – Mandy 2014-06-05 06:45:23

+1

@Mandy一个html元素,如果它不是文档的一部分是不可见的。您可以创建内联框,只有当您将iframe附加到文档时,其窗才完全不可见 – 2015-03-27 22:20:15

+0

无论您访问的是哪个网页,窗口对象是否都相同?该文档是一个JavaScript对象,其中包含有关该网页的信息? – Costa 2016-07-14 21:17:15

window是实际的全局对象。

screen是屏幕,它包含有关用户显示的属性。

document是DOM所在的位置。

+8

'document'也可以是'window.document','screen'可以'window.screen'和'window'可以'window.window'(或'window.window.window'):-P – 2012-03-27 18:19:43

+21

我查过了并且window.window.window.window也可以使用; P – 2012-03-27 18:24:02

+3

@PeterAronZentai:这是因为'window'是一个全局变量,它使它成为全局'window'对象的一个​​属性。 :-) – 2012-03-27 19:02:42

window包含了所有内容,因此您可以拨打window.screenwindow.document来获取这些元素。看看这个小提琴,漂亮,打印每个对象的内容:http://jsfiddle.net/JKirchartz/82rZu/

您还可以看到该对象的萤火/开发工具的内容是这样的:

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

window是一切的根本, screen只是屏幕尺寸,而document是*DOM对象。所以你可以把它看成是window像一个超级document ...

窗口是被加载到浏览器的第一件事。此窗口对象具有大部分属性,如长度,innerWidth,innerHeight,名称(如果已关闭),其父项等。

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

好了,窗口是被加载到浏览器的第一件事。此窗口对象具有大部分属性,如长度,innerWidth,innerHeight,名称(如果已关闭),其父项等。

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

dom

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

iframe

+3

误导某人试图学习基础知识:“文档对象是您的html,aspx,php或其他将被加载到浏览器中的文档。”浏览器渲染HTML和CSS并执行JavaScript。浏览器看不到像PHP这样的服务器端语言的文件。 – 2017-01-29 20:47:51

简单地说,下面更详细,

  • window是这方面的JS
  • 执行上下文和全局对象document包含HTML
  • screen描述物理显示器的全屏

请参阅有关这些对象的详细信息W3CMozilla引用。三者之间最基本的关系是每个浏览器选项卡都有自己的window,并且window具有window.documentwindow.screen属性。浏览器选项卡的window是全局上下文,因此documentscreen指的是window.documentwindow.screen。有关这三个对象的更多细节如下,后面Flanagan's JavaScript: Definitive Guide

window

每个浏览器标签都有自己的*window对象。每个(和不建议使用的<frame>)元素也都有自己的window对象,嵌套在父窗口中。每个窗口都有自己独立的全局对象。 window.window总是指window,但window.parentwindow.top可能指的是封闭窗口,允许访问其他执行上下文。除了下面描述documentscreenwindow属性包括

  • setTimeout()setInterval()结合事件处理程序定时器
  • location给出当前URL
  • history与方法back()forward()给标签的可变历史
  • navigator描述浏览器软件

document

每个window对象必须被渲染的对象document。这些对象会部分混淆,因为分配了唯一标识时,HTML元素会添加到全局对象中。例如。在HTML代码段

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

段落元件可以通过下列任一被引用:

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

screen

window对象也具有与描述的物理显示特性的screen对象:

  • 屏幕属性widthheight是全屏

  • 屏幕属性availWidthavailHeight省略工具栏

显示渲染文档的屏幕部分是JavaScript中的视口,这可能会让人感到困惑,因为我们在讨论与操作系统的交互时称为屏幕的应用程序部分。任何document元素的getBoundingClientRect()方法将返回一个包含topleftbottomright属性的对象,该属性描述元素在视口中的位置。

+0

有一个使用文档对象''window.onload'的等价指令。 – FilipeCanatto 2018-01-04 01:42:17

+0

@FilipeCanatto看到https://*.com/questions/588040/window-onload-vs-document-onload – 2018-01-12 06:02:35