Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:设置location.href与location_Javascript - Fatal编程技术网

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