使用 URLSearchParams 解析和管理URL query参数

news2024/9/25 17:13:47

介绍

首先 URLSearchParams是一个构造函数,会生成一个URLSearchParams对象,参数类型: 不传 | string | object | URLSearchParams, 并且遇到特殊字符它会自动帮我们encode 和 decode

const urlSearch = new URLSearchParams();

console.log("urlSearch", urlSearch); 
var paramsString = "a=1&a=2&b=%40&c=@"
var searchParams = new URLSearchParams(paramsString);

//has 返回 [`Boolean`] 判断是否存在此搜索参数
searchParams.has("a") // true

//get 获取指定搜索参数的第一个值,如果是编码过的会自动转码, 比如 b对应的值是 %40,会自动转为 @
searchParams.get('b') // @

//getAll 获取指定搜索参数的所有值,返回是一个数组
searchParams.getAll('a') // ['1','2']
searchParams.getAll('b') // ['@']

//append 插入一个指定的键/值对作为新的搜索参数。
searchParams.append("d", "3")
searchParams.get('d') // '3'

//set 设置一个搜索参数的新值,假如原来有多个值将删除其他所有的值。
searchParams.getAll('a') // ['1','2']
searchParams.set('a', '5')
searchParams.getAll('a') // ['5']

//delete 从搜索参数列表里删除指定的搜索参数及其对应的值。
searchParams.getAll('a') // ['1','2']
searchParams.delete('a')
searchParams.getAll('a') // []

//toString 返回搜索参数组成的字符串,可直接使用在 URL 上, 如果值有特殊字符会自动encode, 比如c 对应的 @ 会自动encode 为 %40
searchParams.toString() // "a=1&a=2&b=%40&c=%40"

//keys 返回一个iterator对象,此对象包含了键/值对的所有键名, 可以用for of 循环这个对象
for (const key of searchParams.keys()) { console.log(key); // 循环打印 'a' 'a' 'b' 'c'
}

// values 和 entries 方法 同 keys 方法,都返回一个iterator对象, values会包含了键/值对的所有值, entries会包含了键/值对 

注意点

  • URLSearchParams 构造函数不会解析完整的URL,它会把 = 前面的当做key, = 后面当做value,如下会把’example.com/search?quer…’ 当做key,%40 当做value
const paramsString = 'http://example.com/search?query=%40';
const searchParams = new URLSearchParams(paramsString);

searchParams.get('query') // null
searchParams.get('http://example.com/search?query') // @ 
  • 如果字符串起始位置有 ? 的话会被去除,所以字符串起始位置带不带 都可以
const paramsString1 = '?query=1';
const searchParams1 = new URLSearchParams(paramsString1);

const paramsString2 = 'query=1';
const searchParams2 = new URLSearchParams(paramsString2);

searchParams1.toString() // query=1
searchParams2.toString() // query=1 

实战

  • 当我们需要解析url 后面参数时,通过原型上面的方法就可以方便获取和操作
const paramsString = 'a=1&b=2'; 
// 或 const paramsString = '?a=1&b=2'; 
const searchParams = new URLSearchParams(paramsString);
searchParams.get('a') // '1' 
  • 当我们需要生成url 后面的参数时
const params = { a:1, b:2, c:'@'};
const urlSearchStr = new URLSearchParams(params).toString(); // a=1&b=2&c=%40 注意生成的字符串不带 ? 

其他

你如果使用react-router-dom v6版本的话,有一个 useSearchParamshook,也是基于URLSearchParams

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

Java模块化概述

3 模块化 3.1 模块化概述 Java语言随着这些年的发展已经成为了一]影响深远的编程语言,无数平台,系统都采用Java语言编写。但是,伴随着发展,Java也越来越庞大,逐渐发展成为-门“臃肿” 的语言。而且,无论是运行个大型的…

Vulnhub 渗透练习(五)—— lazysysadmin1

环境搭建 下载链接 vmware 打开靶机,nat 网络适配,攻击机同样。 信息收集 一个一个的看过去,这边就不贴图了。 漏洞挖掘 用 kail 的 wpscan 扫一下 wordpress,没发现漏洞。 ┌──(geng㉿geng)-[~] └─$ wpscan --url http…

【Linux06-基础IO】4.5万字的基础IO讲解

前言 本期分享基础IO的知识,主要有: 复习C语言文件操作文件相关的系统调用文件描述符fd理解Linux下一切皆文件缓冲区文件系统软硬链接动静态库的理解和制作动静态编译 博主水平有限,不足之处望请斧正! C语言文件操作 #再谈文件…

SQLSERVER2019安装步骤过程

第一步官网下载SQLSERVER软件包 目前官网只能下载最新版本2022版本。 通过迅雷下载网址 SQL Server 2019 Enterprise (x64) - DVD (Chinese-Simplified)企业版 ed2k://|file|cn_sql_server_2019_enterprise_x64_dvd_2bfe815a.iso|1632086016|58C258FF0F1D006DD3C1F5F17AF3E…

ELK_Elasticsearch环境搭建

目录 一、Windows安装elasticsearch 1、安装JDK 2、下载和解压 3、配置文件 4、启动 5、检查ES是否启动成功 6、浏览器访问 二、 Windows安装Kibana 一、Windows安装elasticsearch 1、安装JDK 安装JDK,至少1.8.0_73以上版本,验证:j…

dbForge Source Control for SQL Server 2.5.X Crack

SQL Server功能概述 的 dbForge 源代码管理 dbForge Source Control for SQL Server 是一个可视化的 SSMS 插件,具有简单易用的界面,可帮助您轻松跟踪 SQL Server 数据库对象中的更改内容、更改时间和原因。该工具使您能够将数据库连接到多个版本控制系统…

【Python学习笔记】40.Python3 SMTP发送邮件

前言 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Python3 SMTP发送邮件 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了…

CSS基础选择器,你认识多少?

前言在上一文初识CSS中,我们了解到了其格式:选择器{ }在初步尝试使用时,我们笼统的直接输入了p { }以选择p标签来对其操作,而这一章节里,我们再进一步探索有关基础选择器的相关内容,理解选择器的作用。选择…

2019蓝桥杯真题平方序列(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明想找到两个正整数 X 和 Y&#xff0c;满足2019<X<Y;2019^2, X^2, Y^2组成等差数列。 请你求出在所有可能的解中&#xff0c;XY 的最小值是多少&#xff1f…

QT(17)- QNetworkAccessManager

QT&#xff08;17&#xff09;- QNetworkAccessManager1 简介2 公有类型3 函数3.1 addStrictTransportSecurityHosts3.2 autoDeleteReplies3.3 cache3.4 clearAccessCache3.5 clearConnectionCache3.6 connectToHost3.7 connectToHostEncrypted3.8 cookieJar3.9 deleteResource…

Metasploit框架基础(一)

文章目录前言一、基础认知二、批量POC/EXP的构想三、poc检测框架的简单实现四、xray五、Meatsploit框架参考前言 Metasploit 一款渗透测试框架漏洞利用的集合与构建和定制满足你的需求的基础漏洞利用和验证的工具 这几个说法都是百度或者官方文档中出现的手法&#xff0c;说…

ASEMI代理FGH60N60SFD,安森美FGH60N60SFD原装IGBT

编辑-Z 安森美FGH60N60SFD原装IGBT参数&#xff1a; 型号&#xff1a;FGH60N60SFD 集电极到发射极电压&#xff08;VCES&#xff09;&#xff1a;600V 栅极到发射极电压&#xff08;VGES&#xff09;&#xff1a;20V 收集器电流&#xff08;IC&#xff09;&#xff1a;120…

【Spark分布式内存计算框架——Spark SQL】9. Dataset(下)RDD、DF与DS转换与面试题

5.3 RDD、DF与DS转换 实际项目开发中&#xff0c;常常需要对RDD、DataFrame及Dataset之间相互转换&#xff0c;其中要点就是Schema约束结构信息。 1&#xff09;、RDD转换DataFrame或者Dataset 转换DataFrame时&#xff0c;定义Schema信息&#xff0c;两种方式转换为Dataset时…

由浅入深掌握 Python 进程间通信的各类方式

由浅入深掌握 Python 多进程间通信各类方式1、为什么要掌握进程间通信2、进程间各类通信方式简介3、消息机制通信1) 管道 Pipe 通信方式2) 消息队列Queue 通信方式4、同步机制通信(1) 进程间同步锁 – Lock(2) 子进程间协调机制 -- Event5、共享内存方式通信(1) 共享变量(2) 共…

【Bluetooth开发】蓝牙开发入门

BLE 蓝牙设备在生活中无处不在&#xff0c;但是我们也只是将其作为蓝牙模块进行使用&#xff0c;发送简单的AT命令实现数据收发。 那么&#xff0c;像对于一些复杂的使用场合&#xff1a;“车载蓝牙”、"智能手表"、“蓝牙音箱”等&#xff0c;我们不得不去了解底层…

千锋教育+计算机四级网络-计算机网络学习-04

UDP概述 UDP协议 面向无连接的用户数据报协议&#xff0c;在传输数据前不需要先建立连接&#xff1b;目地主机的运输层收到UDP报文后&#xff0c;不需要给出任何确认 UDP特点 相比TCP速度稍快些简单的请求/应答应用程序可以使用UDP对于海量数据传输不应该使用UDP广播和多播应用…

VectorDraw Web Library 10.1003.0.1 Crack

将 CAD 绘图和矢量对象显示添加到您的 HTML5 应用程序。 VectorDraw Web Library 是一个矢量图形库&#xff0c;旨在不仅可以打开 CAD 绘图&#xff0c;还可以在任何支持 HTML 5 标准的平台&#xff08;例如 Windows、Android、IOS 和 Linux&#xff09;上显示通用矢量对象。它…

MySQL 9:MySQL存储引擎

数据库存储引擎是数据库的底层软件组织&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;使用数据引擎来创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技术、锁定级别等。 许多不同的数据库管理系统现在支持许多不同的数据引擎。 MySQL的核心是…

字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)

Knuth-Morris-Pratt算法&#xff08;简称KMP&#xff09;是最常用的字符串匹配算法之一。算法简介如下算法解释主要来源于这里&#xff0c;但是通常很难阅读完全&#xff0c;我推荐你直接进入下一节 图例解释部分。我们来观察一下朴素的字符串匹配算法的操作过程。如下图&#…

Linux调试器gdb

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 ​ 目录 前言 正文 下载gdb 生成可调式文件 进入gdb gdb常用指令 查看代码 l 运行程序 r 断点设置 b 显示信息 info 查看断点 info b 删除断点 d …