什么时候设置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";
Answers:
您可能会location
直接设置,因为它稍短一些。如果您要简洁,通常也可以忽略window.
。
URL分配到两个location.href
及location
被定义为工作在JavaScript 1.0,早在网景2,并已在因为每一个浏览器来实现。因此,请选择并使用最清晰的内容。
即使两者都能工作,我还是会使用后者。
location
是一个对象,为该对象分配字符串对于可读性或维护性而言并不是一个好兆头。
window.location
:不需要SAME ORIGIN
。
就像已经说过的,。location
是一个物体但是那个人建议使用两者之一。 但是,使用该.href
版本会更好。
对象具有默认属性,如果未指定其他属性,则假定为默认属性。对于该location
对象,它具有称为的属性.href
。通过在分配过程中未指定ANY属性,默认情况下它将采用“ href”。
一切都很好,直到以后的对象模型版本更改并且不再有默认属性或更改了默认属性为止。然后,您的程序意外中断。
如果您的意思是href
,您应该指定href
。
location
工作是因为在JavaScript 1.0中,该属性已定义为具有这种特殊的分配行为,并且此后的每个浏览器都已实现了该功能。HTML5现在需要它。因此,尽管分配给它可能更漂亮或更一致.href
,但是这样做没有向后或向前兼容性的优势。
window.location = url
更漂亮
location = url
更可爱
几年前,它location
在IE中对我不起作用,但确实起作用location.href
(并且在其他浏览器中都起作用)。从那时起,我一直只使用过location.href
,不再遇到麻烦。我不记得是哪个版本的IE。
strict mode
如果您也尝试直接分配给chrome,则在chrome中会抛出异常location
,因此我始终使用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');
location.href
邮件失败,因为同源策略的:javascript.info/tutorial/...