JavaScript中将对象转查询字符串最常用方法是URLSearchParams构造函数,它原生支持、语义清晰、自动编码,适用于现代环境;不支持嵌套对象,需手动扁平化;支持数组和重复键名;旧环境可用encodeURIComponent手写实现。

JavaScript 中将对象转换为查询字符串,最常用方法是使用 URLSearchParams 构造函数,它原生支持、语义清晰、自动处理编码,推荐在现代浏览器和 Node.js(v10.0+)中使用。
用 URLSearchParams 快速生成查询字符串
这是最简洁可靠的方式,适合大多数场景:
- 直接传入普通对象(键值对),构造器会自动编码特殊字符(如空格、中文、&、= 等)
- 调用
.toString()即可获得标准格式的查询字符串(如"name=%E5%BC%A0%E4%B8%89&age=25") - 支持嵌套对象?不支持 —— 它只处理一层扁平对象;深层结构需先手动扁平化或用其他库
示例:
const obj = { name: '张三', age: 25, city: 'Beijing & Shanghai' };
const params = new URLSearchParams(obj);
console.log(params.toString());
// 输出:name=%E5%BC%A0%E4%B8%89&age=25&city=Beijing+%26+Shanghai
处理数组或重复键名
URLSearchParams 天然支持同一键多次添加,适合生成带数组参数的查询串(如 tags=a&tags=b):
- 用
.append(key, value)多次添加相同 key,即可生成多个同名参数 - 对数组,可遍历后逐个
append,避免手动拼接
示例:
const obj = { tags: ['js', 'web'], category: 'frontend' };
const params = new URLSearchParams();
params.append('category', obj.category);
obj.tags.forEach(tag => params.append('tags', tag));
console.log(params.toString());
// 输出:category=frontend&tags=js&tags=web
兼容旧环境:手写 encodeURI + join 方式
若需支持 IE 或极老运行时,可手动遍历对象并编码:
- 用
encodeURIComponent分别编码 key 和 value(encodeURI不够安全,不能编码=、&等) - 过滤掉
undefined、null值,避免生成key=null - 跳过函数、Symbol 等非字符串/数字类型,防止意外错误
示例:
function objectToQueryString(obj) {
return Object.entries(obj)
.filter(([, v]) => v != null && typeof v !== 'function')
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
.join('&');
}
注意边界情况
实际使用中容易忽略的细节:
-
布尔值:
true/false会被转成字符串"true"/"false",不是1/0,需按接口要求显式转换 -
日期对象:直接 toString() 得到的是可读字符串(如
"2024-05-10T08:00:00.000Z"),通常应先转为时间戳或 ISO 字符串再编码 -
空对象:
new URLSearchParams({})返回空字符串,符合预期;手写方式也应返回空字符串而非"undefined=undefined"
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











