在本教程中,您将了解 JavaScript Location 对象以及如何有效地操作 Location API。

Location 对象表示文档的当前位置 (URL)。您可以通过引用 documentwindow 对象的 location 属性来访问该对象。

window.locationdocument.location 两者都链接到同一个 Location 对象。

JavaScript 位置属性

假设当前的 URL 是:

http://localhost:8080/js/index.html?type=listing&page=2#title

下图是 Location 对象的属性:

Location.href

location.href 是一个包含整个 URL 的字符串。

"http://localhost:8080/js/index.html?type=listing&page=2#title"

Location.protocol

location.protocol 表示当前 URL 使用的协议的字符串,通常是HTTPS / HTTP,包括最后的冒号 :

'http:'

Location.host

location.host 代表主机名:

"localhost:8080"

Location.port

location.port 表示 URL 的端口号。

"8080"

Location.pathname

location.pathname 包含一个首字母 '/' ,后跟 URL 的路径。

"/js/index.html"

Location.search

location.search 是一个字符串,表示 URL 的查询字符串:

"?type=listing&page=2"

Location.hash

location.hash 返回一个字符串,其中包含 URL 从 “#” 后面的所有字符串。

"#title"

Location.origin

location.origin 返回的是一个字符串,是你上一页面的 URL。

"http://localhost:8080"

Location.username

location.username 是一个字符串,包含域名之前的用户名。

Location.password

location.password 是一个字符串,表示域名之前指定的密码。

Location 方法

Location 对象有许多有用的方法,例如 assign()reload()replace()

assign

assign() 方法接受 URL,立即导航到该 URL,并在浏览器的历史记录堆栈中创建一个记录。

location.assign('https://www.myfreax.com'); 

当给 window.location 或者 location.href 设置为 URL 时,会隐式调用 assign() 方法:

window.location = 'https://www.myfreax.com';
location.href = 'https://www.myfreax.com';

如果更改 hostnamepathnameport 属性,页面将使用新的值重新加载。请注意,更改 hash 属性不会重新加载页面,但会在浏览器的历史堆栈中创建新的记录。

当浏览器的历史堆栈中创建新记录时,您可以单击浏览器的后退按钮导航到上一页。

replace

replace() 方法与 assign() 方法类似,只是它不会在浏览器的历史记录堆栈中创建新记录。因此,您无法单击后退按钮返回上一页。

以下代码使用 Location 的 replace() 方法在 3 秒后导航到 URL https://www.myfrex.com:

setTimeout(() => {
    location.replace('https://www.myfrex.com');
}, 3000);

reload

reload 方法重新加载当前显示的页面。当您不带参数调用 reload() 方法时,浏览器将以最有效的方式重新加载页面。

例如,如果页面资源自上次请求以来未发生更改,则会从浏览器的缓存中加载页面资源。要强制从服务器重新加载,请传递 true 给 reload 方法:

reload(true);

请注意,reload() 后面的代码可能会执行,也可能不会执行,具体取决于网络延迟和系统资源等许多因素。因此,最好将 reload() 放置在代码的最后一行。

结论

Location 对象表示页面的当前 URL。可以通过 window.locationdocument.location 访问它。

Location 对象具有许多表示 URL 的属性,例如 protocolhostpathnamesearch

要操纵 Location API,您可以设置其属性新值或使用 assign()replace()reload() 方法。