Javascript:设置location.href与location
与设置Javascript:设置location.href与location,javascript,Javascript,与设置location.href相比,您何时将location设置为URL字符串 location = "http://www.stackoverflow.com"; vs 您可以直接设置位置,因为它稍微短一些。如果你想简明扼要,通常可以省略窗口。 location.href和location的URL分配都定义为在JavaScript 1.0中工作,回到Netscape 2中,并且从那时起已在每个浏览器中实现。所以,选择你认为最清晰的,然后使用它。即使两者都有效,我也会使用后者。 locati
location.href
相比,您何时将location
设置为URL字符串
location = "http://www.stackoverflow.com";
vs
您可以直接设置
位置,因为它稍微短一些。如果你想简明扼要,通常可以省略窗口。
location.href
和location
的URL分配都定义为在JavaScript 1.0中工作,回到Netscape 2中,并且从那时起已在每个浏览器中实现。所以,选择你认为最清晰的,然后使用它。即使两者都有效,我也会使用后者。
location
是一个对象,为对象指定一个字符串对可读性或维护都不是好兆头。正如前面所说,location
是一个对象。但那个人建议使用这两种方法。但是,您最好使用.href
版本
对象具有默认属性,如果未指定其他属性,则假定它们为默认属性。对于位置
对象,它有一个名为.href
的属性。通过在分配期间不指定任何属性,默认情况下它将采用“href”
这一切都很好,直到更高的对象模型版本发生更改,并且不再有默认属性,或者默认属性发生更改。然后您的程序意外中断
如果你的意思是href
,那么你应该在几年前指定href
,位置在IE中对我不起作用,而位置.href
对我起作用(两者都在其他浏览器中起作用)。从那以后,我一直只使用location.href
,再也没有遇到过麻烦。我不记得那是哪个版本的IE。只是澄清一下,你不能做location.split(“#”)
,location
是一个对象,而不是字符串。但是您可以执行location.href.split('#')
因为location.href
是一个字符串。但要记住一个区别
假设您想使用当前URL构建一些URL。下面的代码实际上会重定向您,因为它没有调用,但是:
以下代码起作用:
// 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
属性
搞砸
主办
主机名
href很好的解释,比关于可读性或维护的一般评论要好。事实上,在这种特殊情况下,对象模型不会改变,因为一半的web将停止-因此请使用。。。这听起来不错,但不是真的没关系。DOM或JavaScript中通常没有默认属性的概念。将字符串分配到位置
是有效的,因为该属性定义为在JavaScript 1.0中具有这种特殊分配行为,此后的每个浏览器都实现了这种行为。HTML5现在需要它。因此,虽然分配给.href
可能更漂亮或更一致,但这样做没有向后或向前兼容性优势。window.location=url
更漂亮location=url
更可爱“location.href=url在技术上更正确”不,不是。与大多数情况一样,它更像Javascript的其余部分。但事实上,Location
是一个定义良好的对象,它周围的规范是明确的,并且在所有方面都得到了一致的实施。因此location=url
同样正确。但是更短。因此,imho,在我们不断寻求尽可能减少页面开销的过程中,我们应该更愿意这样做。可能是某个版本的IE做了错误的事情,而其他浏览器都做了正确的事情在严格模式下
如果您试图直接分配给位置
chrome也会抛出异常,因此我总是使用位置。href
IE的“一”版本?@Shawn D。浏览器是否正常工作?那是什么时候发生的!:D@Lpc_dark在实现复杂的PayPal集成时,我遇到了一个非常有说服力的理由使用window.location
:。也许只有我,但location='1〕http://www.example.com“
看起来非常可读。不过,作为一个特例。这是向后兼容的,并且在可预见的将来。如果window.location是一个对象,则为其分配一个字符串将用一个字符串覆盖它。事实上,window.location是一个具有getter和setter方法的属性。设置时,需要一个字符串,并且setter会更新全局位置对象。当您得到它时,将返回全局位置对象。您的注释为true,但您所说的是获取位置对象的href属性,一个字符串。所有其他讨论都涉及赋值,而不是读取值。但你的观点是正确的。不同之处在于href是一个字符串,而location是一个对象。设置location.href
邮件失败是因为同源策略:另外,replace
和assign
:,,我有一个使用TypeScript 2.6.2的Angular 4应用程序。window.location是只读的,我只能使用window.location.href(在angular订阅的回调上下文中)进行分配,而不会重新处理编译器错误-可能这是某种JavaScript 1.0兼容性问题,或者与异步处理相关。基本上,window.location.href似乎是唯一有效的。正如@SwissMister在下面的回答中提到的,window.location.href似乎被视为一个XHR请求。如果从XHR的成功回调中触发,window.location.href将被视为XHR,而window.location模拟单击链接。
// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');
// href property
nextUrl = window.location.href.replace('/step1', '/step2');
Properties
hash
host
hostname
href <--- you need this
pathname (relative to the host)
port
protocol
search