【发布时间】:2013-06-21 02:57:04
【问题描述】:
我试图了解 js 中窗口和文档对象之间的区别。上网查了一下,还是没有很清楚的认识。据我所知:窗口就像一个超级文档,它包含文档对象。那么如果我用firefox打开一个页面:localhost/test.js,能不能说browser:firefox是window对象,文件test.js是document对象?
【问题讨论】:
标签: javascript
我试图了解 js 中窗口和文档对象之间的区别。上网查了一下,还是没有很清楚的认识。据我所知:窗口就像一个超级文档,它包含文档对象。那么如果我用firefox打开一个页面:localhost/test.js,能不能说browser:firefox是window对象,文件test.js是document对象?
【问题讨论】:
标签: javascript
window object 代表当前的浏览上下文。它包含 window.location、window.history、window.screen、window.status 或 window.document 之类的东西。此外,它还包含有关框架设置的信息(frames、parent、top、self 属性),并包含重要的接口,例如applicationCache、XMLHttpRequest、setTimeout、escape 、console 或 localStorage。最后但同样重要的是,它充当 JavaScript 的全局作用域,即所有全局变量都是它的属性。
相比之下,(window.)document object 表示当前在window 中加载的 DOM - 它只是其中的一部分。文档包含documentElement(通常为<html>)、forms 集合、cookie 字符串、location 或readyState 等信息。它还实现了一个不同的接口(可能有多个Documents,例如通过ajax 获得的一个XML 文档),方法有getElementById 或addEventListener。
【讨论】:
很详细的解释:Read here
基本上,window 是浏览器的窗口,document 是其中的 HTML 页面。
【讨论】:
在浏览器中运行的 JavaScript 将 Window 作为其顶层。这意味着全局变量将成为窗口的属性:
// this code is not inside a function
var global1=22;
function test(){
var local=88;
window.global2=99;
console.log(local);//logs 88 because
// local is available within the body
// of this function
console.log(global1);//logs 22
}
console.log(typeof local);//logs undefined becaue were
// outside the funciton body
test();
console.log(global2);//logs 99 because we added
// global2 as a property of window
所以 window 将包含你所有的全局对象,这意味着: parseInt 的作用与 window.parseInt 相同。
Window 甚至包含它自己,所以:
window===window.window.window;//is true
window 没有 getElementById、children、childNodes ... 函数,因为 window 不是 Html 元素,而 document 是。
【讨论】:
JavaScript 应用程序具有上下文,即定义值的范围。对于浏览器,“根”或“全局”对象是window。
window 对象有一个名为document 的属性(变量),它存储文档的表示。该文档包含当前加载的文档的模型表示(例如title、anchors 等)。 window 对象表示显示文档的浏览器窗口。
此外,如果您在一个不在函数中的脚本中定义如下内容:
var x = 10;
实际上你所做的是在全局对象中定义一个变量。在浏览器的情况下,这将是window。
所以window.x 的值为 10。
【讨论】: