【日常记录】【JS】JS中查询参数处理工具URLSearchParams

文章目录

    • 1. 引言
    • 2. URLSearchParams
      • 2.1 URLSearchParams 的构造函数
      • 2.2 append() 方法
      • 2.3 delete() 方法
      • 2.4 entries() 方法
      • 2.5 forEach() 方法
      • 2.6 get() 方法
      • 2.7 getAll() 方法
      • 2.8 has() 方法
      • 2.9 keys() 方法
      • 2.10 set() 方法
      • 2.11 toString() 方法
      • 2.12 values() 方法
    • 参考链接

1. 引言

在实际开发中,这个界面跳转到另一个界面是很常见的需求,只要涉及到跳转,就是涉及到两个界面之前的参数传递,这个时候一般都会拼接一些查询参数,然后另一个界面解析这个查询参数,拿到相应的值,进行对应的处理

为了简化这一过程,js 提供了URLSearchParams URLSearchParams是一个用于解析生成URL查询参数的实用工具

2. URLSearchParams

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

在这里插入图片描述

2.1 URLSearchParams 的构造函数

URLSearchParams() 构造函数创建并返回一个新的 URLSearchParams 对象

new URLSearchParams()
new URLSearchParams(options)

参数

  • options可选,可以是以前情况之一
    • 一个字符串,会按 application/x-www-form-urlencoded 的格式进行解析。开头的 ‘?’ 字符会被忽略
    • 一系列基于字面量的字符串键值对,或者任何对象
    • 一个由字符串键和字符串值组成的键值对对象。请注意,不支持嵌套

返回值

  • 一个 URLSearchParams 实例

示例

    // 通过 url.search 检索参数,传递到构造函数const url = new URL("https://example.com?foo=1&bar=2");console.log('url', url);const params1 = new URLSearchParams(url.search);// 直接从 URL 对象获取 URLSearchParams 对象const params1a = url.searchParams;console.log(params1a);// 传入字符串const params2 = new URLSearchParams("foo=1&bar=2");const params2a = new URLSearchParams("?foo=1&bar=2");console.log('params2a', params2a);// 传入一系列键值对const params3 = new URLSearchParams([["foo", "1"],["bar", "2"],]);console.log('params3', params3);// 传入记录const params4 = new URLSearchParams({ foo: "1", bar: "2" });console.log('params4', params4);

在这里插入图片描述

一般最常见的就是以下情况

  1. 传入 ?号,开头的查询参数;如:?foo=1&bar=2
  2. 传入 不带问号的 查询参数;如:foo=1&bar=2
  3. 传入一个对象;这个一般是为了跳转到其他界面,参数过多的时候,不方便自己拼接

2.2 append() 方法

URLSearchParams 接口的 append() 方法将指定的键/值对附加为新的查询参数。

语法

append(name, value)

参数

  • name:要添加参数的键名
  • value:要添加参数的值

返回值

示例

    let params = new URLSearchParams('?foo=1&bar=2');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);console.log(params.toString()); // foo=1&bar=2&foo=4&foo=4&foo=4

注意:相同的键名追加多次,不会覆盖
控制台输出结果如下

在这里插入图片描述

2.3 delete() 方法

URLSearchParams 接口的 delete() 方法从所有查询参数的列表中删除指定的参数及其关联值

语法

delete(name)
delete(name, value)

参数

  • name:要删除的键名称
  • value:要删除的键值,可选

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);console.log(params.toString());console.log('删除 bar 前', params.toString());params.delete("bar");console.log('删除 bar 后', params.toString());console.log('删除 foo 前', params.toString());params.delete("foo");console.log('删除 foo 后', params.toString());

在这里插入图片描述

  1. 如若指定了删除的键名称,这个键名称存在一个,那么只会删除这一个
  2. 如若指定了删除的键名称,这个键名称存在多个,那么这多个都会删除
  3. 如若指定了删除的键名称键的值,那么只会删除 键名称、键值一样的,如若这俩一样还存在多个,那么这多个都会删除,只要这俩一样都会删除
    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);console.log(params.toString());console.log('删除 bar 前', params.toString());params.delete("bar");console.log('删除 bar 后', params.toString());// console.log('删除 foo 前', params.toString());// params.delete("foo");// console.log('删除 foo 后', params.toString());console.log('删除 foo = 1 前', params.toString());params.delete("foo", "1");console.log('删除 foo = 1 后', params.toString());

在这里插入图片描述

2.4 entries() 方法

URLSearchParams 接口的 entries() 方法返回一个用于遍历该对象中包含的所有键/值对的迭代器。迭代器按照查询字符串中出现的顺序返回键/值对,每一组键和值都是字符串对象

语法

entries()

参数

返回值

  • 迭代器

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);// 显示键/值对for (const item of params.entries()) {// console.log(`${key}, ${value}`);console.log(item);}

在这里插入图片描述

这里的 item 就是一个数组,第一项是 key,第二项是 value,这个地方和 Object.entries 是一样的

可以直接用数组解构

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);// 显示键/值对for (const [key, value] of params.entries()) {console.log(`${key}, ${value}`);// console.log(item);}

在这里插入图片描述

2.5 forEach() 方法

URLSearchParams 接口的 forEach() 方法允许通过回调函数来遍历实例对象上的键值对。 和 Array.forEach 类似

语法

forEach(callback)
forEach(callback, thisArg)

参数
在这里插入图片描述
返回值

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);params.forEach((value, key) => {console.log(`${key}, ${value}`);});

在这里插入图片描述

2.6 get() 方法

URLSearchParams 接口的 get() 方法返回第一个与查询参数对应的值。

语法

get(name)

参数

  • name:要返回的参数的键名。

返回值

  • 如果找到了给定的查询参数,则返回一个字符串;否则返回 null

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);console.log(params.get('foo'));console.log(params.get('age'));

在这里插入图片描述

获取 foo 的时候,返回的是 1 ,因为如若这个 键对应的值有多个,那么会返回第一个,如若这个键没有找到,则返回null

2.7 getAll() 方法

URLSearchParams 接口的 getAll() 方法以数组的形式返回与指定查询参数对应的所有值

语法

getAll(name)

参数

  • name:要返回的参数的键名。

返回值

  • 一个字符串的数组,如果没有找到给定参数的值,则其可以是的。

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 4);params.append("foo", 4);params.append("foo", 4);// // 显示键/值对// for (const [key, value] of params.entries()) {//   console.log(`${key}, ${value}`);//   // console.log(item);// }// params.forEach((value, key) => {//   console.log(`${key}, ${value}`);// });console.log(params.getAll('foo'));console.log(params.getAll('age'));

在这里插入图片描述

foo 本来是一个,然后又添加了三个,所以用 getAll 获取的时候,会返回四个
如若没有找到这个 键名称,那么返回的就是一个空数组

2.8 has() 方法

URLSearchParams 接口的 has() 方法返回一个布尔值,表示指定的键名对应的值是否存在于查询参数中

语法

has(name)
has(name, value)

参数

  • name:要匹配的参数的名称
  • value:要匹配的参数值以及给定的名称

返回值

  • 一个布尔值

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 2);params.append("foo", 3);params.append("foo", 4);console.log(params.has('foo'));console.log(params.has('age'));console.log(params.has('foo', 4));console.log(params.has('foo', 5));

在这里插入图片描述

  • has('foo') 返回的是 true,因为查询参数中有这个
  • params.has('age') 返回的是 false,因为查询参数中没有这个
  • params.has('foo', 4) 返回的是 true,因为查询参数中有这个
  • params.has('foo', 5) 返回的是 false ,因为查询参数中没有这个,但是有,1,2,3,4

2.9 keys() 方法

URLSearchParams 接口的 keys() 方法返回一个用于遍历对象中包含的所有键的迭代器。这些键都是字符串对象。

语法

keys()

参数

返回值

  • 迭代器

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 2);params.append("foo", 3);params.append("foo", 4);for (const key of params.keys()) {console.log(key);}

在这里插入图片描述

2.10 set() 方法

URLSearchParams 接口的 set() 方法用于设置和查询参数相关联的值。如果设置前已经存在多个匹配的值,此方法会删除重复的查询参数;如果查询参数不存在,则创建它。

语法

set(name, value)

参数

  • name:要设置的参数的键名
  • value:要设置的参数的值

返回值

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 2);params.append("foo", 3);params.append("foo", 4);console.log('set 之前', params.toString());params.set("foo", 4);params.set("age", 22);console.log(params.toString());

在这里插入图片描述

2.11 toString() 方法

URLSearchParams 接口的 toString() 方法返回适用于 URL 中的查询字符串。

语法

toString()

参数

返回值

  • 一个不带问号的字符串,如若未设置查询参数则返回空字符串

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 2);params.append("foo", 3);params.append("foo", 4);console.log(params.toString());

在这里插入图片描述

2.12 values() 方法

URLsearchParams 接口的 values() 方法返回一个用于遍历对象中包含的所有键的迭代器。这些键都是字符串对象。

语法

values()

参数

返回值

  • 迭代器

示例

    let params = new URLSearchParams('?foo=1&bar=2&name=ddg');params.append("foo", 2);params.append("foo", 3);params.append("foo", 4);console.log('查询参数', params.toString());for (const item of params.values()) {console.log(item);}

在这里插入图片描述

参考链接

  • URLSearchParams MDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3267054.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Protobuf序列化原理学习

Protobuf 序列化原理学习 1. 基本概念 消息:由于Protocp Buffer主要用于数据存储、网络通信的场景,将结构化的数据(数据结构或对象)进行序列化,生成二进制串来保存或传输。把要序列化的结构化数据称为**消息**。 T -…

Activiti学习之入门个人任务(07)

这里写目录标题 一、分配任务负责人1.1 固定分配1.2 表达式分配1.2.1 UEL表达式1.2.2 使用流程变量分配任务1.2.3 注意事项 1.3 监听器分配 二、查询任务2.1 查询负责人待办2.2 关联businessKey 三、办理任务 一、分配任务负责人 1.1 固定分配 在进行业务流程建模时指定固定的…

vdb:虚拟数据库

将文件虚拟成数据库,序列化写入、反序列化读取、直接读取。

离散型制造业中,MES系统的应用场景

在离散型制造业中,MES(制造执行系统)系统的应用场景极为丰富且关键,它贯穿于整个生产过程的各个环节,从生产计划到生产执行,再到质量控制和物料管理,都发挥着不可替代的作用。以下是离散制造业中…

本地化部署一个简单的AI大模型,Llama3.1

7 月 23 日消息,Meta 今晚正式发布llama3.1,提供 8B、70B 及 405B 参数版本。 Meta 称 4050 亿参数的 Llama 3.1-405B 在常识、可引导性、数学、工具使用和多语言翻译等一系列任务中,可与 GPT-4、GPT-4o、Claude 3.5 Sonnet 等领先的闭源模型…

收藏:高性价比https证书

在当今的数字化世界中,网络安全已经成为了每个网站所有者的首要关注点,为了保护网站的安全,防止数据被窃取或篡改,使用SSL证书已经成为了一种标准的做法,SSL证书是一种用于加密网站和用户之间数据传输的证书&#xff0…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型:Mistral Large 2Node.js 合并 TypeScript 文件执行提案:--experimental-strip-types Mistral AI 发布新一代旗舰模型:Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2,该…

2024新版 黑马程序员《C++零基础入门》笔记——第一章19 cin中文乱码的解决

1.cin中文乱码的解决 2.代码实践 # include "iostream" # include "windows.h" using namespace std;int main() {SetConsoleOutputCP(CP_UTF8);string str;cin >> str;cout << str << endl;return 0; } 注意&#xff0c;勾选之后以后也…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性&#xff1a;图表标注 series-line. markPoint 默认可以通过 type直接标注&#xff1a;‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话&#xff0c;需要设置 标注…

如何让C++程序自动生成dump文件?以及如何分析dump文件?

目录 1、API函数SetUnhandledExceptionFilter介绍 2、调用SetUnhandledExceptionFilter设置异常处理函数 3、调用MiniDumpWriteDump函数导出包含异常上下文的dump文件 4、dump文件的多种生成方式 5、使用Windbg分析dump文件 6、最后 C++软件异常排查从入门到精通系列教程…

数业智能心大陆:定制你的专属心理健康方案

在快速变化的社会中&#xff0c;随着人们对自我健康认识的不断加深&#xff0c;心理健康已成为影响生活质量的关键因素&#xff0c;许多成年人在其一生中会遇到心理健康问题。在探索人类心理奥秘的旅程中&#xff0c;我们发现&#xff0c;每个人的心理状态和需求都是独一无二的…

mmdetection训练后评估指标,验证Loss

项目场景&#xff1a; 对mmdetection框架下训练好的log.json文件进行评估。 问题描述 使用框架底下自带的评估文件&#xff0c;不能对loss进行评估。也就是文件&#xff1a;tools/analysis_tools/analyze_logs.py 解决方案&#xff1a; 自己做了评估loss的代码&#xff0c;目…

使用nginx解决本地环境访问线上接口跨域问题

前言 前端项目开发过程中&#xff0c;经常会遇到各种各样的跨域问题。 虽然大部分时候&#xff0c;由脚手架自带的proxy功能即可解决问题&#xff0c;如webpack&#xff0c;vite等&#xff1b;但是若没有通过脚手架搭建项目&#xff0c;或者必须使用某些特殊规则转发时&#…

C语言常见字符函数和字符串函数精讲

目录 引言 一、字符函数 1.字符分类函数 2.字符转换函数 二、字符串函数 1.gets、puts 2.strlen 3.strcpy 4.strncpy 5.strcat 6.strncat 7.strcmp 8.strncmp 9.strstr 10.strchr 11.strtok 12.strlwr 13.strupr 引言 在C语言编程中&#xff0c;字符函数…

Python小工具——监听某网站的数据变化并进行邮件通知

目录 一、需求描述 二、解析 三、实例代码 一、需求描述 监听自考网2024年广东省6月份的毕业生学历注册进度&#xff0c;这是网址&#xff1a;https://www.chsi.com.cn/xlcx/count_zk.jsp&#xff0c; 如上图所示&#xff0c;我们想知道这个红色的空格啥时候被填满&#xf…

Linux下使用gdb进行调试入门级

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

linux modetest常用命令

1 通过help有哪些参数 130|:/ # modetest -h usage: modetest [-acDdefMPpsCvrw]Query options:-c list connectors-e list encoders-f list framebuffers-p list CRTCs and planes (pipes)Test options:-P <plane_id><crtc_id>:<w>x&l…

主机加固|防勒索病毒|产线工控安全

在当今数字化转型的大潮中&#xff0c;工业控制系统&#xff08;ICS&#xff09;作为制造业的核心命脉&#xff0c;其安全性与稳定性直接关系到企业的生产效率和运营安全。然而&#xff0c;随着网络攻击手段的不断进化&#xff0c;尤其是勒索病毒的肆虐&#xff0c;工控安全已成…

ctfshow 框架复现 工具版

工具 首先下载工具PHPGGC GitHub地址 ./phpggc -lweb466 Laravel5.4 是这个版本的漏洞那么我们去看看那个poc链是这个版本的 Laravel/RCE2可以 命令 ./phpggc -i Laravel/RCE2 题目提示要base64编码提交 ./phpggc Laravel/RCE2 system ls /|base64成功RCE https://31…

Pytorch使用教学5-视图view与reshape的区别

有同学后台留言问为什么view有时可对张量进行形变操作&#xff0c;有时就会报错&#xff1f;另外它和reshape功能好像一致&#xff0c;有什么区别呢&#xff1f;本文就带你了解PyTorch中视图的概念。 在PyTorch中对张量进行形变操作时&#xff0c;很多同学也会使用view方法&am…