Javascript:设置 location.href 与位置

IT技术 javascript
2021-01-24 18:23:19

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

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

对比

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

Mozilla 开发者网络参考

6个回答

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

URL分配到两个location.hreflocation被定义为工作在JavaScript 1.0,早在网景2,并已在因为每一个浏览器来实现。因此,请选择并使用您认为最清楚的那个。

就像@SwissMister 在下面的答案中提到的那样, window.location.href 似乎有点像 XHR 请求。如果从 XHR 的成功回调中触发, window.location.href 将被视为 XHR 而 window.location 模拟单击​​链接。
2021-04-02 18:23:19

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

也许这只是我,但location = 'http://www.example.com'似乎超级可读。虽然,作为特例。这是向后兼容的,并将在可预见的未来保持兼容
2021-03-18 18:23:19
如果 window.location 是一个对象,为它分配一个字符串会用一个字符串覆盖它。实际上 window.location 是一个具有 getter 和 setter 方法的属性。设置它时,需要一个字符串,并且全局 Location 对象由 setter 更新。当你得到它时,将返回全局 Location 对象。
2021-04-06 18:23:19
在实现复杂的 PayPal 集成时,我遇到了一个非常令人信服的使用理由window.location它不需要SAME ORIGIN.
2021-04-08 18:23:19

就像已经说过的那样,location是一个对象但那个人建议使用两者之一。 但是,使用该.href版本会更好

对象具有默认属性,如果没有指定其他内容,则假定它们。location对象而言,它有一个名为 的属性.href并且通过在分配期间不指定任何属性,默认情况下它将假定为“href”。

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

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

很好的解释,比关于可读性或维护的一般评论更好。实际上,在这种特殊情况下,对象模型不会改变,因为一半的网络会停止 - 因此使用任一......哪个都无关紧要
2021-03-11 18:23:19
这听起来不错,但事实并非如此。通常在 DOM 或 JavaScript 中没有默认属性的概念。分配一个字符串是可行的,location因为该属性在 JavaScript 1.0 中被定义为具有这种特殊的分配行为,并且此后的每个浏览器都实现了这一点。HTML5 现在需要它。因此,虽然分配给 可能更漂亮或更一致.href,但这样做没有向后或向前兼容性优势。
2021-03-14 18:23:19
location = url 更可爱
2021-03-26 18:23:19
“location.href = url 在技术上更正确”不,它不是。大多数情况下它更像是 Javascript 的其余部分但事实上,它Location是一个定义明确的对象,围绕它的规范很明确,并且全面实施。所以location = url同样正确。但更短。因此,恕我直言,在我们不断寻求尽可能多地减少页面开销的过程中,应该优先考虑。
2021-04-03 18:23:19
window.location = url 更漂亮
2021-04-04 18:23:19

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

@Lpc_dark 每一个*
2021-03-20 18:23:19
strict mode镀铬如果你想直接分配到会抛出异常location也一样,所以我总是使用location.href
2021-04-02 18:23:19
“一个”版本的IE?
2021-04-03 18:23:19
@Shawn D. 浏览器做事正确吗?什么时候发生的!:D
2021-04-07 18:23:19
可能是某个版本的 IE 做错了,而其他所有浏览器都做对了。;-)
2021-04-08 18:23:19

不过,要记住一个区别。

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