Javascript:设置location.href与位置

chi*_*cal 296 javascript

您何时设置locationURL字符串而不是设置location.href

location = "http://www.stackoverflow.com";
Run Code Online (Sandbox Code Playgroud)

VS

location.href = "http://www.stackoverflow.com";
Run Code Online (Sandbox Code Playgroud)

Mozilla开发人员网络参考

bob*_*nce 249

您可以location直接设置,因为它稍短.如果你想要简洁,你通常也可以省略window..

两者的URL分配location.hreflocation定义为在JavaScript 1.0中运行,在Netscape 2中,并且已经在每个浏览器中实现.因此,请选择并使用您认为最清楚的选项.

  • 就像@SwissMister在下面的答案中提到的那样,似乎window.location.href在某种程度上被视为XHR请求.如果从XHR的成功回调中触发,window.location.href将被视为XHR,而window.location模拟单击链接. (6认同)

psy*_*tik 147

即使两者都有效,我也会使用后者. location是一个对象,并且为对象分配字符串对于可读性或维护而言并不是好兆头.

  • 在实现复杂的PayPal集成时,我遇到了一个非常令人信服的理由使用`window.location`:[它不需要`SAME ORIGIN`](http://javascript.info/tutorial/same-origin-security-policy) . (57认同)
  • 如果window.location是一个对象,则为其分配一个字符串将使用字符串覆盖它.实际上,window.location是一个具有getter和setter方法的属性.设置它时,需要一个字符串,并由setter更新全局Location对象.获得它后,将返回全局Location对象. (8认同)
  • 也许只是我,但`location ='http:// www.example.com'`似乎超级可读.虽然,作为一个特例.在可预见的未来,这是向后兼容的并且[将保持兼容](http://www.w3.org/TR/html5/browsers.html#the-location-interface). (4认同)

小智 66

就像已经说过的那样,location是一个对象.但那个人建议使用其中之一. 但是,您最好使用该.href版本.

对象具有默认属性,如果没有指定其他内容,则假定它们.在location对象的情况下,它具有一个名为的属性.href.并且通过在赋值期间不指定任何属性,默认情况下它将采用"href".

这一切都很好,直到后来的对象模型版本发生更改,并且不再是默认属性,或者更改了默认属性.然后你的程序意外中断.

如果您的意思是href,您应该指定href.

  • 这听起来不错但并非如此.一般来说,DOM或JavaScript中没有默认属性的概念.将字符串分配给`location`是有效的,因为该属性被定义为在JavaScript 1.0中具有这种特殊的赋值行为,并且每个浏览器都实现了该特性.HTML5现在需要它.因此,虽然分配给`.href`可能更漂亮或更一致,但这样做没有向后或向前的兼容性优势. (67认同)
  • `location = url`很可爱 (20认同)
  • 很好的解释,不仅仅是关于可读性或维护的一般性评论.实际上在这种特殊情况下,对象模型不会改变,因为网络的一半会停止 - 因此使用...无关紧要 (13认同)
  • 美貌很重要. (6认同)
  • `window.location = url`更漂亮 (4认同)

Dov*_*etz 20

几年前,location在IE中并location.href没有为我工作(并且都在其他浏览器中工作).从那时起,我一直在使用location.href,再也没有遇到过麻烦.我不记得是哪个版本的IE.

  • 可能是IE的一个版本,它做错了,其他浏览器都正确地做了.;-) (40认同)
  • 如果你试图直接分配给`location`那么在`strict mode` chrome中会抛出异常,所以我总是使用`location.href` (8认同)
  • IE的"一"版? (8认同)

Cha*_*ams 15

只是为了澄清,你做不到location.split('#'),location是一个对象,而不是一个字符串.但你可以做,location.href.split('#');因为location.href是一个字符串.

  • 您的评论是正确的,但您正在讨论_getting_位置对象的href属性(字符串).所有其他讨论都在处理_assigning_一个值,而不是读取值.但你的观点是正确的.不同之处在于href是一个字符串,而location是一个对象. (2认同)

Gra*_*ble 15

但要记住一个区别.

假设您想使用当前URL构建一些URL.以下代码实际上会重定向您,因为它不是在调用,String.replace而是Location.replace:

nextUrl = window.location.replace('/step1', '/step2');
Run Code Online (Sandbox Code Playgroud)

以下代码有效:

// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');

// href property
nextUrl = window.location.href.replace('/step1', '/step2');
Run Code Online (Sandbox Code Playgroud)


Blu*_*luE 6

在 TypeScript 中,window.location.href按原样使用window.location技术上是一个包含以下内容的对象:

Properties
hash 
host 
hostname
href    <--- you need this
pathname (relative to the host)
port 
protocol 
search 
Run Code Online (Sandbox Code Playgroud)

设置window.location会产生类型错误,而 window.location.href类型是字符串。

来源


归档时间:

查看次数:

233165 次

最近记录:

6 年 前