URLSearchParams 是现代浏览器解析 URL 查询参数的推荐方式,自动处理编码解码,支持 getAll() 处理重复键,可结合 Object.fromEntries() 转为对象,兼容主流浏览器且无需第三方库。

用 URLSearchParams 解析 URL 查询参数并转为对象,是现代浏览器中最推荐、最简洁、最安全的方式。它属于 BOM 原生接口,无需引入第三方库,自动处理编码/解码,兼容 Chrome 49+、Firefox 44+、Safari 10.1+、Edge 17+(2026 年已全面覆盖)。
直接从当前页面 URL 解析
利用 location.search 获取带问号的查询字符串(如 "?name=Tom&age=25"),传给 URLSearchParams 构造函数即可。它会自动忽略开头的 ?,也能正确识别空值、重复键等边界情况。
- 创建实例:
const params = new URLSearchParams(location.search); - 转为普通对象(单值优先):
const obj = Object.fromEntries(params.entries());
结果示例:{ name: "Tom", age: "25" } - 注意:
entries()返回的是迭代器,Object.fromEntries()是配套标准方法(ES2019+,同样广泛支持)
处理重复参数或数组型值
原生 URLSearchParams 不自动合并重复键,但提供 getAll() 方法,可用于还原数组语义(如 ?tag=a&tag=b)。
- 获取所有同名参数:
params.getAll("tag")→["a", "b"] - 手动构建含数组的对象(需判断是否多值):
const obj = {};<br> for (const [key, value] of params.entries()) {<br> if (params.getAll(key).length > 1) {<br> obj[key] = params.getAll(key);<br> } else {<br> obj[key] = value;<br> }<br> }
解析其他 URL 字符串(非当前页)
不依赖 location,也能解析任意 URL 的查询部分。推荐用 new URL(urlString).search 提取,再传入 URLSearchParams:
立即学习“Java免费学习笔记(深入)”;
const url = "https://example.com/?id=123&mode=edit";const search = new URL(url).search; // "?id=123&mode=edit"const params = new URLSearchParams(search);- 后续操作同上(
entries()或getAll())
兼容旧环境的备选方案
若需支持 IE 或极老版本浏览器,可手写轻量解析函数,但要注意:
– 正确处理 encodeURIComponent 编码(如中文、特殊符号);
– 区分无值参数(?debug&print=true 中 debug 值应为 "");
– 避免正则误匹配(如 URL 中的 & 实体)。
不过,截至 2026 年,绝大多数生产项目已无需降级处理。


















