window.location.href 是唯一既能读取又能设置当前页面完整 url 的原生属性,返回包含协议、域名、端口、路径、查询参数和哈希的字符串,赋值即触发不可逆跳转。

window.location.href 是最直接、最可靠的获取或设置当前页面完整 URL 的方式,不需要额外库,所有现代浏览器都原生支持。
获取当前页面完整 URL 时,直接读取 window.location.href
它返回的是字符串,包含协议、域名、端口(如有)、路径、查询参数和哈希值,例如 "https://example.com:8080/path?k=v#section"。
- 与
window.location.toString()行为一致,但更明确、更常用 - 注意:返回值是只读字符串,不能通过赋值修改其内容(只能整体替换)
- 如果页面刚加载完成,该值就是地址栏中显示的最终 URL;若经过前端路由(如 Vue Router / React Router 的 history 模式),它仍反映真实地址栏状态,不受虚拟路由干扰
用 window.location.href 跳转页面,本质是触发导航
给 window.location.href 赋一个新 URL 字符串,浏览器会立即加载该地址——这等价于用户在地址栏输入后回车。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 支持相对路径:
window.location.href = "about.html"会基于当前origin解析 - 支持锚点跳转:
window.location.href = "#footer"只滚动不刷新 - 支持 mailto / tel / file 等协议:
window.location.href = "mailto:test@example.com"会唤起默认邮件客户端 - ⚠️ 不要写成
window.location.href += "?t=" + Date.now()这类拼接,容易破坏已有 hash 或 search,应优先用URL构造器处理
为什么不用 document.URL 或 location.toString()?
它们也能返回完整 URL,但存在细微差异:
-
document.URL是只读的,无法用于跳转;且在某些 iframe 场景下可能返回父页面 URL(取决于同源策略) -
location.toString()和location.href值相同,但语义模糊,不如href直观,也不支持赋值 -
window.location.href是唯一既能读又能写的“单点入口”,符合最小认知负担原则
常见错误:跳转后脚本没执行完就中断
给 window.location.href 赋值后,当前页面生命周期会立刻进入卸载阶段(beforeunload → unload),后续 JS 几乎不会执行。
- 不要写
window.location.href = url; console.log("这里不会打印"); - 如需跳转前上报数据,必须用同步请求(
fetch(..., { method: 'POST', keepalive: true }))或navigator.sendBeacon() - 调试时可在 DevTools 的 Network 面板勾选 “Preserve log”,否则跳转后控制台日志会被清空
真正要注意的不是语法对错,而是跳转行为不可逆、不可拦截(除非抛出 beforeunload 提示),一旦赋值就失去控制权。所以每次写 window.location.href = ... 前,先确认这是你想要的“硬跳转”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










