Fetch本身不处理查询参数拼接,需借助URL或URLSearchParams自动编码;支持多值、嵌套JSON字符串化及布尔转字符串,空值需手动过滤,数组用append多次,复杂结构推荐qs库。

Fetch 本身不处理查询参数拼接,需要手动构建 URL 或借助工具生成。关键在于确保参数正确编码、嵌套结构合理展开、数组和空值有明确约定。
基础参数拼接:用 URLSearchParams 最安全
浏览器原生的 URLSearchParams 能自动编码,避免手写 encodeURIComponent 的遗漏和错误:
- 支持字符串、数字、布尔值(会转为字符串),自动处理空格、中文、特殊符号
- 重复键名会保留多个条目(如
?tag=a&tag=b),适合多选场景 - 示例:
const params = new URLSearchParams({ q: "前端 fetch", page: 2 });<br>fetch(`/api/search?${params}`);
输出 URL:/api/search?q=%E5%89%8D%E7%AB%AF+fetch&page=2
处理嵌套对象或数组:需提前扁平化
URL 不支持真正的嵌套结构,常见做法是约定命名规则(如 user[name]、ids[]=1&ids[]=2):
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 简单数组可直接用多次
append:const params = new URLSearchParams();<br>ids.forEach(id => params.append("ids[]", id)); - 嵌套对象建议用工具函数展开(如
{ user: { name: "Alice", age: 30 } }→user[name]=Alice&user[age]=30),避免手写递归 - 注意后端是否接受方括号语法——PHP/Laravel 默认支持,Node.js Express 需用
qs或querystring解析
边界情况要主动控制
默认行为不一定符合业务预期,需显式处理:
立即学习“Java免费学习笔记(深入)”;
-
过滤空值:URLSearchParams 会把
null、undefined转成字符串"null"或"undefined",拼接前应筛掉Object.entries(obj).forEach(([k, v]) => v != null && params.append(k, v)); -
布尔值含义:
true/false通常转为"true"/"false",如需1/0或省略,需手动转换 -
时间格式统一:Date 对象建议先转为 ISO 字符串(
date.toISOString()),避免时区歧义
更复杂场景推荐轻量工具库
当项目频繁处理深层嵌套、文件上传、缓存控制等,可引入 qs(最常用)或 query-string:
-
qs.stringify({ a: [1, 2, 3] }, { arrayFormat: 'brackets' })→"a[]=1&a[]=2&a[]=3" - 支持跳过空值、自定义编码器、序列化日期/正则等高级选项
- 体积小(
qsgzip 后约 3KB),按需引入即可,不污染全局

















