最推荐使用 URLSearchParams,现代浏览器全覆盖,语义清晰、功能完整;旧版 IE 需兼容时才考虑手动解析或正则提取;SPA 的 hash 参数需先从 location.hash 提取再解析。

直接用 URLSearchParams 是最推荐的方式,现代浏览器全覆盖,代码简洁、语义清晰、功能完整。旧版 IE 需要兼容时再考虑备选方案。
用 URLSearchParams 解析查询参数(主流推荐)
这是 ES2015+ 标准 API,专为处理 ?key=value&foo=bar 这类查询字符串设计,无需手动切分或解码。
- 从当前页面获取:
const params = new URLSearchParams(window.location.search) - 读单个值:
params.get('id')(返回第一个匹配值,自动decodeURIComponent) - 查是否存在:
params.has('sort') - 读重复参数:
params.getAll('tag')(如?tag=a&tag=b) - 遍历所有:
params.forEach((val, key) => console.log(key, val))
手动解析 query string(兼容旧环境)
当项目需支持 IE 或极简脚本场景,可手写解析逻辑。核心是提取 window.location.search 后的内容,再按 & 和 = 拆分。
- 先去掉开头的
?:const q = window.location.search.slice(1) - 按
&分成键值对数组:q.split('&') - 每对再用
=拆开,分别decodeURIComponent键和值 - 注意空值、重复键、编码字符(如中文、空格)必须解码,否则会乱码
用正则提取指定参数(轻量临时取值)
适合只取一两个参数、不需遍历全部的简单场景,比如埋点或快速判断。
立即学习“Java免费学习笔记(深入)”;
- 写法示例:
function getParam(k) { const m = new RegExp('[?&]' + k + '=([^]*)').exec(window.location.href); return m ? decodeURIComponent(m[1]) : null; } - 优点是体积小、无依赖;缺点是难以处理复杂编码、多个同名参数、边界情况易出错
- 正则中要同时匹配
?和&开头,避免匹配到路径或哈希里的内容
注意 hash 中的参数(SPA 路由常见)
单页应用(如 Vue Router、React Router 的 hash 模式)常把参数放在 # 后面,例如 https://site.com/#/list?tab=recent。
- 此时不能用
window.location.search,得用window.location.hash - 先提取 hash 字符串,再找其中的
?,截取后面部分,最后仍交给URLSearchParams或手动解析 - 例如:
const hashQuery = window.location.hash.split('?')[1]; const params = hashQuery && new URLSearchParams(hashQuery);


















