什么时候设置location
为 URL 字符串而不是设置location.href
?
location = "http://www.stackoverflow.com";
对比
location.href = "http://www.stackoverflow.com";
什么时候设置location
为 URL 字符串而不是设置location.href
?
location = "http://www.stackoverflow.com";
对比
location.href = "http://www.stackoverflow.com";
您可以location
直接设置,因为它稍短。如果您想简洁,通常也可以省略 the window.
。
URL分配到两个location.href
及location
被定义为工作在JavaScript 1.0,早在网景2,并已在因为每一个浏览器来实现。因此,请选择并使用您认为最清楚的那个。
即使两者都有效,我也会使用后者。
location
是一个对象,并且将字符串分配给对象对于可读性或维护来说并不是好兆头。
就像已经说过的那样,。location
是一个对象但那个人建议使用两者之一。 但是,使用该.href
版本会更好。
对象具有默认属性,如果没有指定其他内容,则假定它们。就location
对象而言,它有一个名为 的属性.href
。并且通过在分配期间不指定任何属性,默认情况下它将假定为“href”。
这一切都很好,直到后来的对象模型版本发生变化并且不再有默认属性,或者默认属性被更改。然后你的程序意外中断。
如果您的意思是href
,您应该指定href
.
几年前,location
在 IE 中对我不起作用,location.href
但确实(并且都在其他浏览器中工作)。从那以后,我一直只是使用location.href
,再也没有遇到过麻烦。我不记得那是哪个版本的 IE。
不过,要记住一个区别。
假设您想使用当前 URL 构建一些 URL。下面的代码实际上会重定向你,因为它不是调用String.replace
而是Location.replace
:
nextUrl = window.location.replace('/step1', '/step2');
以下代码有效:
// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');
// href property
nextUrl = window.location.href.replace('/step1', '/step2');