设置位置。Href与位置

什么时候将location设置为URL字符串而不是设置location.href?

location = "http://www.stackoverflow.com";

vs

location.href = "http://www.stackoverflow.com";

Mozilla Developer Network Reference .

281230 次浏览

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

location.hreflocation的URL赋值被定义为在JavaScript 1.0中工作,追溯到Netscape 2,并在此后的每个浏览器中实现。所以随便挑一个,用你觉得最清楚的。

即使两者都有效,我也会使用后者。 location是一个对象,将一个字符串分配给一个对象对于可读性或可维护性都不是好兆头

就像已经说过的,location是一个对象。但是,你最好使用.href版本。

对象具有默认属性,如果没有指定其他属性,则假定它们是默认属性。在location对象的情况下,它有一个名为.href的属性。通过在赋值过程中不指定ANY属性,它将默认假设“href”。

这一切都很好,直到后来的对象模型版本更改,或者不再有默认属性,或者默认属性被更改。然后您的程序意外中断。

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

几年前,location在IE中不能为我工作,而location.href在其他浏览器中都可以工作。从那以后,我一直只使用location.href,再也没有遇到过麻烦。我不记得是哪个版本的IE了。

澄清一下,你不能做location.split('#')location是一个对象,不是字符串。但是你可以使用location.href.split('#');,因为location.href是一个字符串。

但有一点要记住。

假设您想要使用当前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');

在TypeScript中使用window.location.href,因为window.location在技术上是一个对象,包含:

Properties
hash
host
hostname
href    <--- you need this
pathname (relative to the host)
port
protocol
search

设置window.location将产生类型错误,而 window.location.href类型为字符串

< a href = " https://stackoverflow.com/a/13106968/6276704 " > < / >来源

在使用React时,请使用global.location.href