location 就是地址栏对象,能拿当前 URL,也能跳转页面。
核心五个:
① location.href——完整 URL,赋值就跳转
② location.host——域名+端口
③ location.pathname——路径
④ location.search——? 后面的参数
⑤ location.reload()——刷新
坑:location.href = "url" 会产生历史记录、location.replace() 不产生、reload(true) 强制刷新。
拿这个地址举例:https://www.example.com:8080/page/index.html?id=10
| 部分 | 例子 | 说明 |
|---|---|---|
| protocol 协议 | https: | http / https |
| hostname 域名 | www.example.com | 网站是谁家的 |
| port 端口 | :8080 | 网站服务的"门牌号" |
| pathname 路径 | /page/index.html | 页面放在哪 |
| search 参数 | ?id=10 | ? 开头的查询参数 |
| href 完整地址 | 整串 | 读写通用 |
// 网址开头的协议,比如 "https:" window.location.protocol; // 是谁家的网站,比如 "www.example.com" window.location.hostname; // 页面放在哪个路径下,比如 "/page/index.html" window.location.pathname; // 门牌号,比如 "8080";没写就是默认 window.location.port; // 整条完整网址,能读也能改(改了就跳走) window.location.href; // 问号后面那一截,比如 "?id=10" window.location.search;
search 一定以 ? 开头;没有参数时 search 是空字符串 ""。拿参数就用 search + 下一讲的 URLSearchParams。
// 写法一:直接给 href 赋值,浏览器就跳过去
// 特点:跳完后历史里多记一笔(按后退能回来)
window.location.href = "https://www.baidu.com";
// 用在哪:普通跳转(列表→详情、下一题……)
// 写法二:replace,把当前页从历史里涂掉
// 特点:跳完后历史里没这笔(按后退回不来)
window.location.replace("https://www.baidu.com");
// 用在哪:登录成功跳首页(防止点后退又退回登录页)
可以这样记:href 是"新记一笔账"(可后退);replace 是"把这一页涂掉"(不可后退)。
// 在网址后面拼 ?名字=值,就能把小数据带给下一页 // 下一页怎么收:先用 location.search 把 ? 后面的整段取出来 window.location.href = "04-url-params.html?name=张三&age=18"; // 再丢给 URLSearchParams 拆成 key=value(下一页细讲)
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| location.href | 当前完整网址;给它赋值就跳转 | 要跳的网址 | 字符串 | location.href = 'https://www.baidu.com'; // 赋值就跳转 |
| location.replace(url) | 跳走,但从历史里涂掉(不能后退) | 网址 | 无 | location.replace('new.html'); // 跳走不能后退 |
| location.reload() | 刷新当前页 | 无 | 无 | location.reload(); // 刷新当前页 |
| location.search | 问号后的参数串 | 无 | 如 ?name=张三&age=20 | console.log(location.search); // ?a=1&b=2 |
| location.hash | # 后面的锚点部分 | 无 | 字符串 | console.log(location.hash); // #锚点 |
| location.pathname | 网址里的路径部分 | 无 | 字符串 | console.log(location.pathname); // /a/b/c |