JavaScript location 对象

在 JavaScript 中,我们可以使用 window 对象下的 location 子对象来操作当前窗口的 URL。所谓 URL,指的就是页面地址。

JavaScript location 对象的属性

在 JavaScript 中,location 对象为我们提供了非常多用于操作 URL 的属性,常用的如下表所示。假如有一个页面的完整 URL 为:

https://www.lvyenet.com:8080/products/detail?id=1&size=10#overview
location 对象的属性
属性 说明
href 当前页面的完整 URL
protocol 当前 URL 的协议部分(包括冒号),比如 "https:"
host 主机名和端口号,比如 "www.lvyenet.com:8080"
hostname 只包含主机名,比如 "www.lvyenet.com"
port 只包含端口号,比如 "8080"
pathname 只包含路径部分,比如 "/products/detail "
search 只包含查询参数(包括问号),比如 "?id=1&size=10"
hash 只包含锚点部分(包括 # 号),比如 "#overview "

提示: location 对象本质上是 “window 对象” 的属性。因此在使用时,可以省略 “window.” 前缀。

示例 1:location 对象的属性

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <script>
        console.log("location.href:", location.href);
        console.log("location.protocol:", location.protocol);
        console.log("location.host:", location.host);
        console.log("location.hostname:", location.hostname);
        console.log("location.port:", location.port);
        console.log("location.pathname:", location.pathname);
        console.log("location.search:", location.search);
        console.log("location.hash:", location.hash);
    </script>
</body>
</html>

运行结果如下。

location.hrefhttps://www.lvyenet.com:8080/products/detail?id=1&size=10#overview
location.protocolhttps:
location.host:www.lvyenet.com:8080
location.hostname:www.lvyenet.com
location.port8080
location.pathname:/products/detail
location.search:?id=1&size=10
location.hash:#overview

分析:

需要注意的是,上面代码会因为你当前页面地址的不同,然后输出结果也会不同。

示例 2:提取 search 中的参数

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <script>
        // 假设当前 URL 有参数 ?id=10&name=jack
        const params = new URLSearchParams(location.search);

        console.log(params.get("id"));
        console.log(params.get("name"));
    </script>
</body>
</html>

运行结果如下(假如访问的地址是“http://127.0.0.1:5500/test.html?id=10&name=jack”)。

10
jack

分析:

当我们通过 location.search 拿到 “?id=10&name=jack“ 这种字符串时,如果想把 id 的值(10)取出来,以前需要编写十几行正则代码来解析 URL 参数。而现在我们可以使用 URLSearchParams() 函数来提取,非常的方便。

JavaScript location 对象的方法

在 JavaScript 中,location 对象主要提供了 3 种方法来帮助我们控制页面的导航。

location 对象的方法
方法 说明
assign() 加载新页面(有历史记录,可以后退)
replace() 替换当前页面(无历史记录,无法后退)
reload() 刷新当前页面(相当于按下 F5)

提示: 由于客观存在的技术原因,使用绿叶网的 HTML 在线编译器运行 location 对象方法会有问题。对于本节后面的例子,建议小伙伴们在本地自行测试。

1. location.assign()

在 JavaScript 中,我们可以使用 location 对象的 assign() 方法在当前窗口加载一个新页面。使用 location.assign() 方法,我们可以实现在当前窗口跳转到指定页面的效果。

示例 3:使用 location.assign()

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <button id="btn">跳转</button>
    <script>
        const oBtn = document.getElementById("btn");
        oBtn.addEventListener("click", function() {
            location.assign("https://www.baidu.com");
        });
    </script>
</body>
</html>

页面效果如下图所示。

JavaScript location.assign() 示例

分析:

当我们点击【跳转】按钮之后,会在当前窗口直接跳转到百度首页。对于这个例子来说,下面 2 种方式是等价的。在实际开发中,大多数情况下我们使用的都是方式 2(要重点掌握)。

// 方式 1
location.assign("https://www.baidu.com");

// 方式 2
location.href = "https://www.baidu.com";

2. location.replace()

在 JavaScript 中,location.replace() 方法也会加载一个新页面,但与 location.assign() 不同的是:location.replace() 会使用新 URL 替换掉浏览器历史记录中当前页面的 URL。

也就是说,如果使用 location.replace() 来加载新页面。那么用户点击浏览器的 “后退” 按钮时,不会回到原来的页面。

示例 4:使用 location.replace()

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <button id="btn">跳转</button>
    <script>
        const oBtn = document.getElementById("btn");
        oBtn.addEventListener("click", function() {
            location.replace("https://www.baidu.com");
        });
    </script>
</body>
</html>

页面效果如下图所示。

JavaScript location.replace() 示例

分析:

当我们点击【跳转】按钮之后,会在当前窗口直接跳转到百度首页。但是当点击浏览器的后退按钮之后,并不会跳转到原来的页面。

3. location.reload()

在 JavaScript 中,我们可以使用 location.reload() 方法来重新加载当前页面,也就是 “刷新当前页面”。

在实际开发中,location.reload() 方法用得非常多(尤其是重新加载资源时),而 location.assign() 和 location.replace() 方法用得较少。

示例 5:使用 location.reload()

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <button id="btn">刷新</button>
    <script>
        const oBtn = document.getElementById("btn");
        oBtn.addEventListener("click", function() {
            location.reload();
        });
    </script>
</body>
</html>

页面效果如下图所示。

JavaScript location.reload() 示例

分析:

location.reload() 相当于在浏览器中使用 “F5” 快捷键来刷新页面。只不过 “F5” 是手动刷新,而 location.reload() 是使用程序刷新。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号