window.location 是浏览器当前 url 的实时映射对象,直接读取 href、hostname 等属性即可获取对应信息,修改则立即触发导航;其属性已自动拆解,无需解析,但 search 和 hash 为字符串需手动处理,跨 iframe 时指向当前 frame 地址。

window.location 不是“用来获取信息的工具”,而是浏览器当前 URL 的实时映射对象——你读它的属性,就是在读地址栏此刻显示的内容;你改它的属性,浏览器立刻响应。它不缓存、不计算、不转换,只反映真实状态。
直接读取 href、hostname、pathname 等属性即可
不需要调用函数,也不需要解析字符串。window.location 的每个属性都已自动拆解好:
-
location.href:完整 URL 字符串,含协议、域名、路径、查询参数、hash(例如"https://example.com/path?a=1#top") -
location.hostname:纯域名,不含端口和协议("example.com") -
location.host:域名 + 端口(端口为 80/443 时通常省略,所以常和hostname相同) -
location.pathname:路径部分,以/开头("/path"),不含查询参数或 hash -
location.search:问号开头的查询字符串("?a=1&b=2"),注意它是原始字符串,不是对象 -
location.hash:井号开头的锚点("#top"),包含#符号本身
在控制台输入 location 回车,就能看到全部属性的当前值——这就是最可靠的“当前页面信息”来源。
search 和 hash 的值不能直接当对象用
它们返回的是字符串,不是解析后的键值对。比如 location.search === "?id=123&type=page",但 location.search.id 是 undefined。
- 若需提取查询参数,得手动解析:
new URLSearchParams(location.search)(现代浏览器支持)或正则/字符串分割 -
location.hash值始终带#,要用location.hash.slice(1)才能得到干净的锚点名 - 修改
search或hash时,不能直接赋值给它们(如location.search = "?x=1"会报错),必须通过location.href或history.pushState()更新整个 URL
跨 iframe 场景下,location 指向的是当前执行脚本的上下文
在嵌套页面中,window.location 总是当前 JS 所在 frame 的地址,不是顶层页面的:
- 主页面脚本里写
location.href→ 返回主页面 URL -
<iframe src="child.html"></iframe>里的脚本写location.href→ 返回child.html的 URL - 想操作父级或顶层页面?用
parent.location.href或top.location.href,但受同源策略限制,跨域时会抛出SecurityError
别依赖 this.location 或 self.location——它们和 window.location 完全等价,只是写法不同,无实际区别。
不要用 location.href 刷新页面
虽然 location.href = location.href 能强制刷新,但它会丢弃表单未提交数据,且触发完整页面重载(包括重新请求 HTML、JS、CSS)。
- 要刷新,优先用
location.reload() -
location.reload(true)强制绕过缓存,location.reload()可能从缓存加载 -
location.assign()和location.replace()都是跳转方法,但后者不会在历史栈留下记录,适合登录后跳首页这类“不可回退”场景
真正容易被忽略的点是:所有对 location 属性的读取都是同步、无副作用的,但任何写入(比如改 href)都会立刻中断当前 JS 执行、开始导航——没有“确认”环节,也没有回调。一旦赋值,后续代码基本不会运行。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











