仅使用位置与跨浏览器使用 window.location 有啥区别吗
Posted
技术标签:
【中文标题】仅使用位置与跨浏览器使用 window.location 有啥区别吗【英文标题】:Is there any difference with using only location vs using window.location across browsers仅使用位置与跨浏览器使用 window.location 有什么区别吗 【发布时间】:2013-10-25 18:05:24 【问题描述】:我发现自己总是在写作:
console.log(window.location.href);
想都没想。 SO上的大多数答案也是这样写的。我有什么理由不能写:
location.href
因为location
是窗口级别的对象?这是否存在跨浏览器兼容性问题?
澄清:我知道有document.location
- 那是不是这个问题是关于什么的。这是关于仅使用 location
与跨浏览器使用 window.location
是否有任何区别。
【问题讨论】:
你还读书吗?这不是location
vs location.href
的重复,而是x
vs window.x
@NikhilAgrawal 不。您需要再次阅读问题。或者你上面的评论。两者都将解释为什么它明确不是关于对象与属性,而是特定对象的范围。
人们变得太幸福了。这个问题甚至与它应该重复的问题无关。
@Tmdean:无论如何,它仍然是重复的,例如“相关”列表中的第一个问题。 ***.com/questions/4709037/…
@Qantas94Heavy 您链接到的问题不是相关列表中的第一个链接问题。相关列表中的所有内容都与我的问题无关。你的完全有效,但我搜索了很长时间,没有找到任何结果
【参考方案1】:
有一些不同。
在全局范围内,它们之间绝对没有区别,但在其他情况下你可能会遇到麻烦:
function ()
var location = 'href' : '123' ;
console.log(window.location.href) // actual url
console.log(location.href) // '123'
这源于这样一个事实,如果你写 location 而不用 window 作为前缀,它将遍历每个范围以找到一个名为 location 的变量。最终它将在窗口中找到它,除非另一个范围也声明了一个。显然反过来也是如此:
function ()
var window = 'location' : 'href': '123' ;
console.log(window.location.href) // '123'
console.log(location.href) // actual url
我更喜欢给全局变量加上 window 前缀,因为这样我可以立即知道它们是全局变量,而且当我找到一个没有以 window 前缀的全局变量时,我知道这是一个缺少 var 的错字,但是这纯粹是个人喜好。
【讨论】:
嗯,window 只是一个命名空间,您只需要始终如一地谨慎使用它。通常,人们使用document.getElementById
,但也有人可以使用var document = 'Hello!'
,它没有该功能。但是,window 是一种您无法覆盖的关键字。所以使用window.document.getElementById
应该保证你得到原生的javascript 代码。您可以在本地范围内使用 var win=window,doc=win.document;
作为前缀。特别是在使用 3rd 方代码时,并且您关心安全性,那么这就是 imo 的方式(不知道这是否常见)。以上是关于仅使用位置与跨浏览器使用 window.location 有啥区别吗的主要内容,如果未能解决你的问题,请参考以下文章
在<a href=""></a>里,我要在href动态显示当前网址,用javascript的 document.write(window.locat