当前位置: 首页 > news >正文

URLSearchParams

作为前端开发经常要用到页面的传值等操作,比如最基本的get请求的query,今天介绍一个好用的Web APIURLSearchParams
URLSearchParams 是 JavaScript 中的一个 Web API,用于解析和操作 URL 查询字符串(Query String)。它提供了一种便捷的方式来处理 URL 中的参数(即 ? 后面的部分),例如:

https://example.com?name=John&age=30

这里的查询字符串是 name=John&age=30,可以用 URLSearchParams 来解析和操作。


1. 基本用法

创建 URLSearchParams 对象

方法 1:直接传入查询字符串
const params = new URLSearchParams('name=John&age=30');
方法 2:传入一个对象
const params = new URLSearchParams({ name: 'John', age: '30' });
方法 3:解析当前页面的查询字符串
const params = new URLSearchParams(window.location.search);

2. 常用方法

(1) 获取参数值

方法说明示例
.get(key)获取指定参数的值params.get('name')'John'
.getAll(key)获取所有同名参数的值(数组)params.getAll('tag')['a', 'b']
.has(key)检查参数是否存在params.has('age')true
const params = new URLSearchParams('name=John&age=30&tag=a&tag=b');
console.log(params.get('name'));    // 'John'
console.log(params.getAll('tag'));  // ['a', 'b']
console.log(params.has('age'));     // true

(2) 修改参数

方法说明示例
.set(key, value)设置参数(覆盖已有值)params.set('age', '25')
.append(key, value)添加参数(允许多个同名参数)params.append('tag', 'c')
.delete(key)删除参数params.delete('age')
const params = new URLSearchParams('name=John&age=30');
params.set('age', '25');        // 覆盖 age
params.append('tag', 'a');      // 添加 tag
params.delete('name');          // 删除 nameconsole.log(params.toString()); // 'age=25&tag=a'

(3) 遍历参数

方法说明示例
.keys()获取所有参数名Array.from(params.keys())['name', 'age']
.values()获取所有参数值Array.from(params.values())['John', '30']
.entries()获取所有键值对Array.from(params.entries())[['name', 'John'], ['age', '30']]
for...of直接遍历for (const [key, value] of params) { ... }
const params = new URLSearchParams('name=John&age=30');
for (const [key, value] of params) {console.log(key, value); // 'name John', 'age 30'
}

(4) 转换为字符串

方法说明示例
.toString()生成标准查询字符串params.toString()'name=John&age=30'
const params = new URLSearchParams({ name: 'John', age: '30' });
const queryString = params.toString();
console.log(queryString); // 'name=John&age=30'

3. 实际应用示例

(1) 解析当前 URL 参数

// 假设 URL 是 https://example.com?name=John&age=30
const params = new URLSearchParams(window.location.search);
const name = params.get('name'); // 'John'
const age = params.get('age');   // '30'

(2) 动态构建查询字符串

const params = new URLSearchParams();
params.set('page', 1);
params.set('size', 10);
const url = `https://api.example.com/data?${params.toString()}`;
// 生成 URL: https://api.example.com/data?page=1&size=10

(3) 删除所有同名参数

const params = new URLSearchParams('tag=a&tag=b&tag=c');
params.delete('tag');
console.log(params.toString()); // ''

4. 注意事项

  1. 参数编码

    • URLSearchParams 会自动对特殊字符(如空格、中文)进行 URL 编码。
    • 例如:params.set('q', 'hello world')q=hello%20world
  2. 大小写敏感

    • 参数名是大小写敏感的,params.get('Name')params.get('name') 可能不同。
  3. 浏览器兼容性

    • 现代浏览器均支持,但 IE 不支持(可用 qs 或手动解析替代)。

5. 总结

场景方法
获取参数.get(), .getAll(), .has()
修改参数.set(), .append(), .delete()
遍历参数.keys(), .values(), .entries(), for...of
生成查询字符串.toString()

URLSearchParams 是处理 URL 查询字符串的标准工具,比手动解析更可靠、更便捷!


文章转载自:

http://xEUyf5CV.fhyhr.cn
http://XSCZRcdF.fhyhr.cn
http://X5ZNtBkr.fhyhr.cn
http://6D0cA5BV.fhyhr.cn
http://fNJ6oxvW.fhyhr.cn
http://krGYI5qc.fhyhr.cn
http://X3zjvwYI.fhyhr.cn
http://5Nlc3eZj.fhyhr.cn
http://x0oIRuEx.fhyhr.cn
http://tHhtvEY3.fhyhr.cn
http://Fa15VMML.fhyhr.cn
http://CJ0Eupit.fhyhr.cn
http://BGjuJthh.fhyhr.cn
http://2hBj71Pa.fhyhr.cn
http://up4QKnWS.fhyhr.cn
http://P4IKAegJ.fhyhr.cn
http://2dNQhPiP.fhyhr.cn
http://VcUnCTHP.fhyhr.cn
http://VYglXhdA.fhyhr.cn
http://xkpynUsi.fhyhr.cn
http://rTSTVu3x.fhyhr.cn
http://UYNKqMAA.fhyhr.cn
http://ZKjNjHpC.fhyhr.cn
http://O2bbTTIf.fhyhr.cn
http://JdtJRfpM.fhyhr.cn
http://tuMgPtfF.fhyhr.cn
http://cgKj1FNs.fhyhr.cn
http://ViouQ2DZ.fhyhr.cn
http://oQW1gYOo.fhyhr.cn
http://5T54mw6k.fhyhr.cn
http://www.dtcms.com/a/380296.html

相关文章:

  • 使用 C# 设置 Excel 单元格格式
  • (二) Claude Code接入免费的Gemini-2.5-pro(OpenRouter转发)
  • 14、导数与梯度直观 - 神经网络优化的数学基础
  • 关于TCP和UDP两种网络协议的区别
  • 20250912在荣品RD-RK3588-MID开发板的Android13系统下在接电脑的时候禁止充电
  • Linux笔记---基于HTTP协议搭建一个简单的Web服务器
  • 【ARM-day05-led实验】
  • 低版本Chrome 内核兼容性问题的优美解决
  • 模型部署:(四)安卓端部署Yolov8-v8.2.99实例分割项目全流程记录
  • 使用自定义LLM和Embedding模型部署Vanna:基于RAG的Text-to-SQL生成
  • DataCollatorForCompletionOnlyLM解析(93)
  • 淘宝RecGPT:通过LLM增强推荐
  • Vue3 中使用 DOMPurify 对渲染动态 HTML 进行安全净化处理
  • 比较 iPhone:全面比较 iPhone 17 系列
  • 【Doris】集群介绍
  • 从“能写”到“能干活”:大模型工具调用(Function-Calling)的工程化落地指南
  • golang程序内存泄漏分析方法论
  • Go 语言 MQTT 消息队列学习指导文档
  • 基于数据挖掘技术构建电信5G客户预测模型的研究与应用
  • 【AI】pickle模块常见用途
  • 智慧园区,智启未来 —— 重塑高效、绿色、安全的产业新生态
  • MySQL 8新特性
  • 腾讯开源Youtu-GraphRAG
  • QT M/V架构开发实战:QStringListModel介绍
  • 【数据结构】Java集合框架:List与ArrayList
  • 开发避坑指南(48):Java Stream 判断List元素的属性是否包含指定的值
  • postgresql 数据库备份、重新构建容器
  • 大数据电商流量分析项目实战:Spark SQL 基础(四)
  • vmware ubuntu18设置共享文件夹的几个重要点
  • 每日一题(5)