JavaScript 中的窗口、屏幕和文档有什么区别?

IT技术 javascript
2021-01-12 00:30:42

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

5个回答

Window是主要的 JavaScript 对象根,也就是global object浏览器中的根,也可以将其视为文档对象模型的根。您可以以window.

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

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

由于window是全局对象,因此您可以仅使用属性名称来引用它的任何属性——因此您不必写下来window.——它将由运行时计算出来。

从@Mandy注释混淆window视口Awindow是浏览器选项卡或<iframe>(或已弃用<frame>的 JavaScript 对象视口是所渲染的矩形document看到的标签或框架内。
2021-03-14 00:30:42
@Mandy 如果 html 元素不是文档的一部分,则它不可见。您可以创建 iframe,在将 iframe 附加到文档之前,它们的窗口完全不可见
2021-03-15 00:30:42
window.document 还是 document 一直都一样?
2021-03-18 00:30:42
因为 window 是全局对象 - 它的每个属性/方法都可以在不实际写下 [window.] 的情况下访问只是引用了多种方式是一样的。
2021-03-27 00:30:42
无论您访问哪个网页,窗口对象都相同吗?该文档是一个包含有关该网页的信息的 javascript 对象?
2021-04-02 00:30:42

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

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

dom

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

内嵌框架

误导试图学习基础知识的人:“文档对象是您的 html、aspx、php 或将加载到浏览器中的其他文档。” 浏览器呈现 HTML 和 CSS 并执行 JavaScript。浏览器看不到带有服务器端语言(如 PHP)的文件。
2021-03-18 00:30:42
@BennettBrown 确实如此,但是初学者在 Chrome(或其他调试)控制台中探索windowwindow.document使用可以阐明它们的嵌套性质。如何document公开 HTML 和document.(文档点)显示文档的所有属性。而父级window包含 javascript 全局变量!这篇文章可以让初学者开始这个。初学者也应该看看这个 SO how to
2021-03-31 00:30:42

简而言之,下面有更多详细信息,

  • 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 给出当前 URL
  • history使用方法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具有描述物理显示属性对象:

  • 屏幕属性widthheight全屏

  • 屏幕属性availWidthavailHeight省略工具栏

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

彼得,同意辛格抄袭非常严重。我不太介意,实际上更介意他从我的帖子中删除的一件事是我说我的帖子是在关注 Flanagan 的部分。我猜如果他要抄袭,他觉得有必要删除引用LOL。
2021-03-27 00:30:42
window.onload使用文档对象的等效指令吗?。
2021-03-31 00:30:42
2021-04-05 00:30:42
这是在 Medium (Simran Singh) 上抄袭的“窗口...每个浏览器选项卡都有自己的”Simran Singh 在 Medium 的帖子被 100% 抄袭。第一部分来自eligeske.com页面(也抄袭了这个 Stack Overflow 问题的两个答案(Arlan TManjunath Raddi 的答案))。
2021-04-09 00:30:42

window是实际的全局对象。

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

document是 DOM 所在的位置。

document也可以是window.documentscreen可以是window.screen,并且window可以是window.window(或window.window.window):-P
2021-04-04 00:30:42
我需要通过ajax打开一个新页面,我想用新页面替换整个当前页面。我应该使用 $(document).load(page); 或 $(window).load(page); ?
2021-04-07 00:30:42
@PeterAronZentai:那是因为window是一个全局变量,这使它成为全局window对象的一个属性:-)
2021-04-10 00:30:42

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

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

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

window是一切的根,screen只有屏幕尺寸,并且document是顶级 DOM 对象。所以你可以把它想象成window一个超级document...