Answers:
根据W3C,它们是相同的。实际上,出于跨浏览器安全的考虑,您应该使用window.location
而不是document.location
。
window.location
),而没有提供任何理由。如果您不提供理由,为什么有人应该听取您的建议?Christoph的回答在这方面要有用得多。
获取当前位置对象的规范方法是window.location
(请参见1996年的MSDN页面和2006 年的W3C草案)。
将此与进行比较document.location
,后者最初仅将当前URL作为字符串返回(请参见MSDN上的此页面)。可能是为了避免混淆,document.location
已替换为document.URL
(请参见MSDN上的此处),它也是DOM Level 1的一部分。
据我所知,所有现代浏览器都映射document.location
到window.location
,但是我仍然更喜欢,window.location
因为这是我编写第一个DHTML以来使用的。
window.location
,则使用是否同样有效location
?
window
对象。因此,您在脚本顶层定义的任何变量或函数都是引用的对象的属性,而该对象window
恰好是全局对象。如果缺少全局对象,则将其隐含为window.
-从而location
将其解释为window.location
。警告- if(an_undefined_variable)
如果未定义变量,fe 将抛出错误- if(window.an_undefined_variable)
不会。
在所有兼容的浏览器上均可读写window.location。
document.location在Internet Explorer(至少)中为只读(至少),但在基于Gecko的浏览器(Firefox,SeaMonkey)中为读/写。
console.log(location);
吗?!
document.location
最初是一个只读属性,尽管Gecko浏览器也允许您对其进行分配。为了确保跨浏览器的安全,请window.location
改用。
阅读更多:
有趣的是,如果您有一个名为“ 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!')
window.location
并且document.location
不能在Chrome或Firefox被隐藏。
document.location === window.location
退货 true
也
document.location.constructor === window.location.constructor
是 true
注意:刚刚在Firefox 3.6,Opera 10和IE6上进行了测试
===
并且==
是等价的。
"abc" == new String("abc")
回报true
,而"abc" === new String("abc")
回报false
。
==
并===
是等价的。参见规范第11.9.3和11.9.6节。对于非空,非未定义,非数字的,非布尔,具有相同类型的非字符串值,==
行为是由11.9.3部分1f中,并且支配===
行为由11.9.6部分7,其相同地读回true
,如果x和y指向同一对象。否则,返回false
。
document.location
和window.location
都指向对象。您错过了三等分的全部知识;使用2等于并不能证明它们是相同的obj。我们应该使用3个等值而不是2个等值,因为2个等值会给我们带来误报。在document.location是等于的URL字符串的浏览器上window.location.toString()
,然后document.location==window.location
将返回true,而document.location===window.location
将返回false。
document.location === window.location
比较而言。.constructor
我认为,进行比较的事实也意味着这个答案仍然是正确的,但是使用===
它将简化推理。
是的,它们是相同的。这是浏览器JS API中的许多历史古怪之一。尝试做:
window.location === document.location
如今很少见到这种差异,因为html 5不再支持框架集。但是回到那时我们有了框架集,document.location将仅重定向正在执行代码的框架,而window.location将重定向整个页面。
我想说的window.location
是获取当前URL的更可靠的方法。以下是在一种情况下出现的window.location
和之间的区别document.url
,在这种情况下,我在URL中附加了哈希参数,然后再阅读。
在URL中添加哈希参数之后。
在较旧的浏览器中,我无法使用来从URL中获取哈希参数document.url
,但是当我使用时,window.location
便能够从URL中获取哈希参数。
因此使用总是更好window.location
。
document.URL
-关于window.location
和document.location
。另外,document.url
不存在=应该为大写。
document.location.constructor === window.location.constructor
是true
。
这是因为它与您从中看到的对象完全相同document.location===window.location
。
因此,无需比较构造函数或任何其他属性。
是的,他们是一样的,但是....!
window.location
在某些Internet Explorer浏览器上不起作用。
尽管大多数人在这里建议,但这是经过一段时间的Google Analytics(分析)动态协议的外观(在最近从ga.js迁移到analytics.js之前):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
更多信息: https ://developers.google.com/analytics/devguides/collection/gajs/
在新版本中,他们使用了“ //”,因此浏览器可以自动添加协议:
'//www.google-analytics.com/analytics.js'
因此,如果谷歌喜欢document.location到window.location
时,他们需要在JS协议,我想他们有一些理由。
总的来说:我个人认为document.location
和window.location
相同,但是如果巨人对使用document.location的类似Google之类的浏览器具有最大的统计数据,我建议您遵循它们。