JavaScript 中不存在“BOM 路由”概念,实际是通过 window.location 操作 URL 查询参数;推荐用 URLSearchParams 获取(get/getAll/has)和修改参数,配合 history.replaceState 或 pushState 更新 URL 而不刷新页面;避免直接修改 href 或手动拼接字符串。

JavaScript 中 BOM 路由本身没有“BOM 路由”这个概念,实际指的是通过 window.location(属于 BOM)操作当前页面 URL,尤其是查询参数(query string)。获取和修改 URL 参数不依赖路由库(如 Vue Router、React Router),而是直接操作原生 URL 对象或字符串。
获取 URL 查询参数(推荐用 URLSearchParams)
URLSearchParams 是现代浏览器原生支持的 API,简洁可靠,自动处理编码解码:
- 获取所有参数:const params = new URLSearchParams(window.location.search)
- 读取单个值:params.get('id') → 返回字符串(若存在多个同名参数,只返回第一个)
- 读取全部同名值:Array.from(params.getAll('tag'))
- 检查是否存在:params.has('page')
修改 URL 参数(不刷新页面)
使用 history.replaceState() 可更新地址栏 URL 而不触发页面跳转或重新加载:
- 先构造新 search 字符串:const newParams = new URLSearchParams(window.location.search); newParams.set('page', '2');
- 拼接完整 URL:const newUrl = `${window.location.pathname}?${newParams.toString()}`;
- 更新浏览器地址栏:history.replaceState(null, '', newUrl);
注意:replaceState 不会添加历史记录,适合“修正参数”;若需前进/后退支持,用 history.pushState()。
立即学习“Java免费学习笔记(深入)”;
兼容旧浏览器(IE 等不支持 URLSearchParams)
可手动解析 query string,但需自行处理编码与分割逻辑:
- 提取 search 部分:const queryString = window.location.search.slice(1);
- 按 & 拆分,再按 = 分割键值,注意 decodeURIComponent 解码
- 建议封装为简单函数,例如 parseQuery(queryString) → { key: value } 对象
常见误区提醒
- window.location.href 修改会强制刷新页面,不适合仅改参数
- 直接拼接字符串易出错(遗漏 ?/&、未编码特殊字符),优先用 URLSearchParams
- hash(# 后部分)与 search(? 后部分)是不同区域,修改 hash 应用 window.location.hash



















