JavaScript 中的 window.location 和 document.location 有什么区别?

IT技术 javascript window.location
2021-03-06 21:26:13

他们都应该引用同一个对象吗?

6个回答

根据 W3C,它们是相同的。实际上,为了跨浏览器安全,您应该使用window.location而不是document.location.

请参阅:http : //www.w3.org/TR/html/browsers.html#dom-location

来吧触发快乐的投票者,减轻一点。在大多数情况下,考虑到 rahul 指定的警告,他们的行为类似。让我们不要把他钉在语义上。有点费城,先生们。一方面,我发现他的回答非常令人满意。+1(克里斯托夫的应该是公认的答案,但拉胡尔的答案是可以接受的——至少,不值得投反对票。)
2021-04-24 21:26:13
+1 但也可以看到下面 Phil Hamer 和 Christoph 的回答,他们添加了必要的背景信息和警告以完全理解这个问题。
2021-05-02 21:26:13
-1 用于推荐最佳实践(始终使用window.location)而不提供任何理由。如果你不提供理由,为什么有人要接受你的建议?Christoph 的回答在这方面更为有用。
2021-05-08 21:26:13
投反对票。回答矛盾。它大胆地说它们是相同的,然后用较浅的文字描述了不同之处。他们绝对不一样。
2021-05-10 21:26:13
实际上我注意到两者之间的区别,例如,如果您想从子框架导航到沙盒框架,那么您可以仅使用 document.location 而不是 window.location
2021-05-13 21:26:13

获取当前位置对象的规范方法是window.location(参见1996 年的 MSDN 页面2006的 W3C 草案)。

将此与 比较document.location,后者最初仅将当前 URL 作为字符串返回(请参阅MSDN 上的此页面)。可能是为了避免混淆,document.location被替换为document.URL(参见MSDN 上的此处),这也是DOM Level 1 的一部分

据我所知,所有现代浏览器映射document.locationwindow.location,但我还是喜欢window.location因为这是自从我写我的第一DHTML我所用。

如果您使用window.location,仅使用location是否同样有效
2021-04-22 21:26:13
@commonpike它是 - 在[至少] HTML文档中的脚本上下文中,所有定义的变量都成为属性的全局对象是window对象。因此,您在脚本的顶层定义的任何变量或函数都是 引用的对象的属性,而该对象window恰好是全局对象。全局对象在不存在时被暗示window.- 因此location被解释为window.location. 警告——if(an_undefined_variable)如果没有定义变量,fe会抛出一个错误——if(window.an_undefined_variable)不会。
2021-05-07 21:26:13

window.location在所有兼容的浏览器上都是读/写的。

document.location在 Internet Explorer 中是只读的(至少),但在基于 Gecko 的浏览器(Firefox、SeaMonkey)中是读/写的。

我无法重现document.locationIE 中只读的声明。我可以在 IE 10、9、8和 6 中成功分配给它(使用来自modern.ie 的虚拟机)。
2021-04-20 21:26:13
有什么评论console.log(location);吗?!!
2021-05-12 21:26:13

document.location最初是一个只读属性,尽管Gecko 浏览器也允许您分配给它。为了跨浏览器的安全,请window.location改用。

阅读更多:

document.location

window.location

我找不到明确的答案何时使用它们中的任何一个,请看下面我的答案
2021-04-21 21:26:13

有趣的是,如果您有一个名为“location”的框架、图像或表​​单,那么“document.location”将分别提供对框架窗口、图像或表​​单的引用,而不是 Location 对象。显然,这是因为 document.forms、document.images 和 window.frames 集合名称查找优先于映射到 window.location。

<img name='location' src='location.png'>

if (document.location.tagName == 'IMG') alert('Hello!')
没有优先级,它只是被覆盖
2021-04-15 21:26:13
不,它没有被覆盖。它是隐藏的,所以 Phil 在属性解析期间元素优先是正确的。
2021-04-21 21:26:13
@Mr.Llama 你是对的。似乎所有现代浏览器都不再以我上面描述的方式运行。这似乎是由于给 document.location 了“不可伪造”属性。相关 Chromium 更改:src.chromium.org/viewvc/blink?view=revision & revision=189862和 Firefox 错误:bugzilla.mozilla.org/show_bug.cgi? id=1133760
2021-04-30 21:26:13
@kangax,看来您是对的:jsfiddle.net/uL4ysszr但这种行为有多可靠?它是否足够跨浏览器?
2021-05-11 21:26:13
刚刚对此进行了测试(2016 年 10 月)。似乎window.location并且document.location不能在 Chrome 或 Firefox 中隐藏。
2021-05-12 21:26:13