本文介绍了内置的 URLSearchParams 类,用于处理 URL 查询字符串,包括其属性如 size、append、get、getAll 等方法的详细说明和示例,以及如何使用这些方法操作和转换查询字符串。
定义:URLSearchParams 是一个 内置类,用于处理 URL 查询字符串(query string)的解析和构建。
URL 查询字符串是 URL 中位于问号(?)后面的部分,用于传递参数和数值。例如,在以下 URL 中(https://example.com/page?name=John&age=30),查询字符串是 name=John&age=30
// 浏览器中的 URL:http://127.0.0.1:5501/103001_URLSearchParams.html?name=jerry | |
// 获取 url 中的查询字符串 | |
const searchStr = window.location.search; | |
// URLSearchParams () 构造函数可以接受一个查询字符串作为参数,用于初始化 URLSearchParams 对象。 | |
const searchParams = new URLSearchParams(searchStr); | |
console.log('searchParams', searchParams); |
下面根据控制台的这张图来详细说说 URLSearchParams 原型上有哪些属性和方法:
# 1.size 属性
用于返回查询参数的数量。
const searchParams= new URLSearchParams('key1=value1&key2=value2&key3=value3'); | |
console.log(searchParams.size); // 输出:3 |
注意:到 2021 年为止,URLSearchParams 的 size 属性是在 Chrome 89 版本中加入的。不过需要注意的是,不同浏览器可能对 URLSearchParams 接口的支持程度不同,因此在实际使用时,建议检查目标浏览器的兼容性。
# 2.URLSearchParams.append(name, value)
向查询字符串中添加一个新的参数。 可以 append 多个同名的,不会覆盖,会追加
// URLSearchParams.append (name, value):向查询字符串中添加一个新的参数。可以 append 多个同名的,不会覆盖,会追加 | |
searchParams.append("gender", "male"); | |
searchParams.append("gender", "female"); |
# 3.URLSearchParams.get(name)
入参 name 必传
获取指定名称的参数值。如果存在多个同名参数,则返回第一个参数的值。
console.log(searchParams.get('gender')); // 字符串 'male' 如果有多个,默认返回第一个 | |
console.log(searchParams.get('age')); //get 一个不存在的,返回 null |
# 4.URLSearchParams.getAll(name)
入参 name 必传
获取指定名称的所有参数值,返回一个数组。
console.log(searchParams.getAll('gender')); // 数组 ['male', 'female'] |
# 5.URLSearchParams.has(name)
检查查询字符串中是否存在指定名称的参数。如果存在,则返回 true,否则返回 false。
console.log(searchParams.has('gender')); // 存在返回 true | |
console.log(searchParams.has('age')); // 不存在返回 false |
# 6.URLSearchParams.set(name, value)
设置指定名称的参数值。如果参数已存在,则会替换为新的值。
// URLSearchParams.set (name, value):设置查询字符串中指定参数的值,如果参数不存在,则添加新的参数。 | |
searchParams.set('age', 18); | |
console.log(searchParams.get('age')); // 18 |
# 7.URLSearchParams.delete(name)
// URLSearchParams.delete (name):从查询字符串中删除指定的参数。 | |
searchParams.delete('age'); | |
console.log(searchParams.get('age')); //null 因为 age 被上一行删除了,所以返回 null |
# 8.URLSearchParams.toString()
将 URLSearchParams 对象转换为字符串表示形式,返回查询字符串。
// URLSearchParams.toString ():将 URLSearchParams 对象转换为字符串表示形式,返回查询字符串。 | |
console.log(searchParams.toString()); // name=jerry&gender=male&gender=female |
# 9.URLSearchParams.sort()
按照参数名称对查询字符串中的参数进行排序。
// 按照参数名称对查询字符串中的参数进行排序。 | |
searchParams.sort(); | |
console.log(searchParams.toString()); // gender=male&gender=female&name=jerry |
# 10.URLSearchParams.entries()
返回一个迭代器,该迭代器包含了所有查询参数的键值对。
//entries () 方法用于返回一个迭代器,该迭代器包含了所有查询参数的键值对。 | |
for (const [key, value] of searchParams.entries()) { | |
console.log(key, value); | |
} | |
// gender male | |
// gender female | |
// name jerry |
# 11.URLSearchParams.forEach()
遍历。回调第一个参数是 value,第二个参数是 key
searchParams.forEach((value, key)=>{ | |
console.log(key, value); | |
}) | |
// gender male | |
// gender female | |
// name jerry |
# 12.URLSearchParams.keys()
用于返回一个迭代器,该迭代器包含了所有查询参数的键。
//keys () 方法用于返回一个迭代器,该迭代器包含了所有查询参数的键。 | |
for (const key of searchParams.keys()) { | |
console.log(key); | |
} | |
// gender | |
// gender | |
// name |
# 13.URLSearchParams.values()
用于返回一个迭代器,该迭代器包含了所有查询参数的值。
//values () 方法用于返回一个迭代器,该迭代器包含了所有查询参数的值。 | |
for (const value of searchParams.values()) { | |
console.log(value); | |
} | |
// male | |
// female | |
// jerry |
至此所有的属性和方法都写了,最后附上我测试的完整代码:
# 测试 URLSearchParams
// 浏览器中的 URL:http://127.0.0.1:5501/103001_URLSearchParams.html?name=jerry | |
// 获取 url 中的查询字符串 | |
const searchStr = window.location.search; | |
// URLSearchParams () 构造函数可以接受一个查询字符串作为参数,用于初始化 URLSearchParams 对象。 | |
const searchParams = new URLSearchParams(searchStr); | |
console.log("searchParams", searchParams); | |
// URLSearchParams.append (name, value):向查询字符串中添加一个新的参数。可以 append 多个同名的,不会覆盖,会追加 | |
searchParams.append("gender", "male"); | |
searchParams.append("gender", "female"); | |
console.log(searchParams.getAll("gender")); // 数组 ['male', 'female'] | |
console.log(searchParams.get("gender")); // 字符串 'male' 如果有多个,默认返回第一个 | |
console.log(searchParams.get("age")); //get 一个不存在的,返回 null | |
console.log(searchParams.has("gender")); // 存在返回 true | |
console.log(searchParams.has("age")); // 不存在返回 false | |
// URLSearchParams.set (name, value):设置查询字符串中指定参数的值,如果参数不存在,则添加新的参数。 | |
searchParams.set("age", 18); | |
console.log(searchParams.get("age")); // 18 | |
// URLSearchParams.delete (name):从查询字符串中删除指定的参数。 | |
searchParams.delete("age"); | |
console.log(searchParams.get("age")); //null 因为 age 被上一行删除了,所以返回 null | |
// URLSearchParams.toString ():将 URLSearchParams 对象转换为字符串表示形式,返回查询字符串。 | |
console.log(searchParams.toString()); // name=jerry&gender=male&gender=female | |
// 按照参数名称对查询字符串中的参数进行排序。 | |
searchParams.sort(); | |
console.log(searchParams.toString()); // gender=male&gender=female&name=jerry | |
//entries () 方法用于返回一个迭代器,该迭代器包含了所有查询参数的键值对。 | |
for (const [key, value] of searchParams.entries()) { | |
console.log(key, value); | |
} | |
// gender male | |
// gender female | |
// name jerry | |
searchParams.forEach((value, key) => { | |
console.log(key, value); | |
}); | |
// gender male | |
// gender female | |
// name jerry | |
console.log(searchParams.keys()); | |
//keys () 方法用于返回一个迭代器,该迭代器包含了所有查询参数的键。 | |
for (const key of searchParams.keys()) { | |
console.log(key); | |
} | |
// gender | |
// gender | |
// name | |
//values () 方法用于返回一个迭代器,该迭代器包含了所有查询参数的值。 | |
for (const value of searchParams.values()) { | |
console.log(value); | |
} | |
// male | |
// female | |
// jerry |