在浏览器中仅使用位置与使用window.location是否有任何区别

时间:2013-10-17 09:56:35

标签: javascript javascript-objects window.location

我发现自己总是写作:

console.log(window.location.href);

甚至没有考虑过它。关于SO的大多数答案也是这样写的。我有什么理由不能写:

location.href

因为location是窗口级别的对象?这是否存在跨浏览器兼容性问题?

澄清:我知道有document.location - 这个问题是什么。这与在浏览器中仅使用location和使用window.location时存在任何差异有关。

1 个答案:

答案 0 :(得分:12)

存在一些差异。

在全球范围内,它们之间绝对没有区别,但在其他情况下,您可能遇到麻烦:

function () {
  var location = { 'href' : '123' } ;
  console.log(window.location.href) // actual url
  console.log(location.href) // '123'
}

这源于这样一个事实,即如果你在没有用窗口作为前缀的情况下编写位置,它将通过每个范围来查找名为location的变量。最终它会在窗口中找到它,除非另一个范围也声明了一个。显然反过来也是如此:

function () {
  var window = { 'location' : { 'href': '123' } };  
  console.log(window.location.href) // '123'
  console.log(location.href) // actual url
}

我更喜欢用窗口作为全局变量的前缀,因为这样我立即知道它们是全局的,也因为当我找到一个没有窗口前缀的全局变量时,我知道这是一个错误的输入错误,但是这纯粹是个人偏好。