仅使用位置与跨浏览器使用 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 有啥区别吗的主要内容,如果未能解决你的问题,请参考以下文章

axios的使用与跨域问题的解决

同源策略与跨域请求

同源策略与跨域请求

浏览器同源策略与跨域出现原因

在<a href=""></a>里,我要在href动态显示当前网址,用javascript的 document.write(window.locat

Android 是不是支持 window.location.replace 或任何等价物?