urlsearchparams 是现代浏览器解析查询参数的标准api,自动处理url编码解码、支持重复键和多值场景,比正则或split更安全健壮;ie不支持需polyfill。

URLSearchParams 是什么,为什么不用正则或 split
直接用 URLSearchParams 读取查询参数是现代浏览器的标准做法,它比手动 location.search.slice(1).split('&') 安全、健壮得多——能自动处理 URL 编码(比如空格变 %20、中文变 %E4%BD%A0),还能区分重复键和多值场景。IE 不支持,但 Chrome/Firefox/Safari/Edge 17+ 全都行;如果必须兼容 IE,得用 polyfill 或降级方案。
从当前页面 URL 读取 searchParams 的三种常用方式
核心对象是 location.search 字符串,传给 URLSearchParams 构造函数即可:
-
const params = new URLSearchParams(location.search)—— 最常用,适合读当前页参数 -
const params = new URLSearchParams(window.location.search)—— 效果一样,location是window.location的简写 -
const params = new URLSearchParams('?name=张三&city=%E5%8C%97%E4%BA%AC')—— 可传任意字符串,不一定要来自 location,调试时很实用
get / getAll / has / keys 等方法的实际差异
不同方法应对不同业务逻辑,选错容易漏数据或报错:
-
params.get('id'):只返回第一个匹配值,适合单值参数(如?id=123)。若 URL 是?tag=a&tag=b,它只返回'a' -
params.getAll('tag'):返回数组['a', 'b'],必须用这个才能拿到全部重复键的值 -
params.has('sort'):判断是否存在该参数(即使值为空,如?sort=也返回true) -
[...params.keys()]或Array.from(params.keys()):获取所有参数名,用于遍历或校验白名单
注意:params.get('missing') 返回 null(不是 undefined),别用 == null 判断,直接 != null 或 typeof === 'string' 更稳妥。
常见错误:decodeURIComponent 不需要手动调用
URLSearchParams 的 get、getAll 等方法返回的值**已自动解码**,你不需要、也不应该再套一层 decodeURIComponent()。否则遇到原本就未编码的值(比如 ?q=hello world)会抛 URIError。
反例:decodeURIComponent(params.get('q')) → 报错
正例:params.get('q') → 自动返回 "hello world"
只有当你自己构造原始 query 字符串(比如拼接 key=value)再传给 URLSearchParams 时,才需确保 value 已用 encodeURIComponent() 编码。
真正容易被忽略的是:searchParams 是只读快照,修改它不会影响地址栏;要跳转并带新参数,得用 history.pushState 或改 location.href,不能只改 params.append()。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











