更简单快捷的处理URL参数

news/2024/11/16 7:08:23/

在开发前端页面时候,经常会用到跳转页面,在页面进行交互的时候,经常会用到参数携带,我们一般处理方法就是在路由的后面携带我们需要传递的参数。

URL拼接即字符串拼接,在最开始的时候,我们对字符串的拼接都是用+号进行拼接的

var name = "张三"
console.log("hello my name is " + name) //  hello my name is 张三

后面有了模版字符串``,就省去了+号这个繁写的操作

var name = "张三"
console.log(`hello my name is ${name}`) //  hello my name is 张三

但无轮是+号还是`` 处理起来比较麻烦,当字符串中含有大量变量时候,不仅阅读起来比较困难,遇到问题排查也比较费力,后续的维护更加困难。

于是在JS中就引入了URL构造器,可以更加简单优雅的处理url。
URL接口用于解析、构造、规范化和编码URL。其构造的实例支持若干属性和方法,可以用来读写URL相关的属性值。

基本语法:

var myUrl = new URL(url, [base])

URL构造函数中传入的地址必须是绝对地址,非绝对地址就会报错,如果第一个参数是相对地址,那么后面的base必须有是觉得地址,若第一个是觉得地址,第二个可不传参

URL实例对象的属性和方法:

var url = new URL('https://www.zhangxinxu.com:80/wordpress/?s=url#comments');
var ftp = new URL('ftp://username:password@192.168.1.1/path/file');

基本方法和属性:

hash:URL地址中的锚链值,包含字符串’#‘,例如这里url.hash的返回值是’#comments’。
host:URL地址中host主机地址,包括协议端口号,这里url.host的返回值是’www.zhangxinxu.com:80’。
hostname:URL地址中主机名称,不包括端口号,这里url.hostname的返回值是’www.zhangxinxu.com’。
href:完全的URL地址。
origin [只读]:返回URL地址的来源,会包含URL协议,域名和端口。这里url.origin的返回值是’https://www.zhangxinxu.com:80’。
password:返回URL地址域名前的密码。ftp协议中比较常见。这里ftp.password的返回值是’password’。
username:返回URL地址域名前的用户名。ftp协议中比较常见。这里ftp.username的返回值是’username’。
pathname:返回URL中的目录+文件名。例如这里ftp.pathname的返回值是’/path/file’。
port:返回URL地址中的端口号。例如这里url.port的返回值是’80’,ftp.port的返回值是’‘。
protocol:返回URL地址的协议,包括后面的冒号’:‘。例如这里url.protocol的返回值是’https:’,ftp.protocol的返回值是’ftp:‘。
search:返回URL地址的查询字符串,如果有参数,则返回值以问号’?‘开头。例如这里url.search的返回值是’?s=url’。
searchParams:返回一个URLSearchParams对象,可以调用URLSearchParams对象各种方法,对查询字符串进行非常方便的处理

与参数相关的操作

基本用法:

const baseUrl = "https://www.raise3d.com"
const detail= "detail"
const url = new URL(`paramsSpec/${detail}`, baseUrl)
console.log(url) // "https://www.raise3d.com/paramsSpec/detail"

给url进行添加参数

const baseUrl = "https://www.raise3d.com"
const detail = "detail"
let url = new URL(`paramsSpec/${detail}`, baseUrl)
url.searchParams.append("factory", "F1")
url.searchParams.append("type", "AD830")
console.log(url) //"https://www.raise3d.com/paramsSpec/detail?factory=F1&type=AD830"

给url进行添加参数时,是以一个数组作为参数添加到url中

const baseUrl = "https://www.raise3d.com"
let url = new URL(baseUrl)
const paramsArr = ['apple', 'banana', 'orange'];
url.searchParams.set("fruit", paramsArr.join(","))
console.log(url.toString())  
//https://www.raise3d.com/?fruit=apple%2Cbanana%2Corange
//这里的%2C是表示, 是编码进行转义了

获取url参数

const urlString = "https://www.raise3d.com/paramsSpec/detail?factory=F1&type=AD830"
let url = new URL(urlString)
console.log(url.searchParams.get("factory")) //F1
console.log(url.searchParams.get("type"))  //AD830

获取url参数, 获取以数组模式拼接的参数

const urlString = "https://www.raise3d.com/paramsSpec/detail?fruit=apple,orange,banana"
let url = new URL(urlString)
console.log(url.searchParams.get("fruit")) // apple,orange,banana

处理多个同名参数
例如:?array=value1&array=value2&array=value3,可以使用getAll 来获取参数

const baseUrl = "https://www.raise3d.com"
let url = new URL(baseUrl)//添加多个同名参数
const paramsArr = ['apple', 'banana', 'orange'];
paramsArr.forEach(v => url.searchParams.append("fruit", v))
console.log(url.toString()) // https://www.raise3d.com/?fruit=apple&fruit=banana&fruit=orange// 获取多个同名参数
console.log(url.searchParams.get("fruit")) //apple
console.log(url.searchParams.getAll("fruit")) //["apple","banana","orange"]

除了使用URL构造器处理url相关的事宜外,还可以使用URLSearchParams构造函数,与URL构造函数有异曲同工之秒
URLSearchParams 是一个 JavaScript 内置类,用于处理 URL 查询字符串(query string)的解析和构建。

其方法和URL基本类似,大概简单的列举下:
1、URLSearchParams.append(name, key):添加新的键值对作为查询参数
2、URLSearchParams.delete(name):删除已存在的查询参数
3、URLSearchParams.entries():返回查询参数们的迭代器对象,我们可以迭代该迭代器对象获得所有的键值对
4、URLSearchParams.forEach(callback):此方法可以遍历查询对象
5、URLSearchParams.get(name):返回指定关键字对象的值
6、URLSearchParams.getAll(name):以数组形式返回所有当前查询关键字对应的值
7、URLSearchParams.has(name):返回布尔值,true或者false,是否包含某个查询关键字
8、URLSearchParams.keys():返回一个迭代器对象,允许迭代该对象中所有的关键字
9、URLSearchParams.values():返回一个迭代器对象,允许迭代该对象中所有的关键字值
10、URLSearchParams.set(name, value):设置参数值,有则替换,无则加冕
11、URLSearchParams.sort():方法将此对象中包含的所有键/值对就地排序,并返回undefined。排序顺序根据键的Unicode码位
12、URLSearchParams.toString():把URLSearchParams对象转换成查询字符串

当然对url参数的处理除了用以上方法之外,还可以用正则进行匹配。例如:
使用正则表达式提取参数:

const url = "https://example.com/page?name=John&id=123&category=tech";
const paramsRegex = /[?&]([^=#]+)=([^&#]*)/g;
const paramsRegex2 = /([^?&]+)=([^?&=]*)/g
console.log(paramsRegex.exec(url)) //["?name=John","name","John"]
console.log(paramsRegex2.exec(url)) //["name=John","name","John"]

http://www.ppmy.cn/news/1547385.html

相关文章

js像循环数组那样循环一个数字,Array.from()

Array.from() 是 JavaScript 中的一个静态方法,它可以从类数组对象或可迭代对象中创建一个新的数组实例。这个方法非常有用,尤其是在处理那些不是真正的数组但可以像数组一样访问其元素的对象时。 基本语法 Array.from(arrayLike, mapFn, thisArg) ar…

python程序对服务器cpu和内存资源占用的管理。

背景 在服务器上部署了一套目标检测的程序,做成while true 的轮询检测数据更新的定时任务。 结果没想到那台服务器还有一套可视化程序要给领导演示看,结果演示的时候平台各种报错。 然后通过top查看了一下资源利用率发现python的程序cpu 130。&#xf…

YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构

摘要 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnCo…

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合,AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革,在投入提升与政策扶植的双重作用下,以大模型技术为底座、结合专业化金融能力的金融大…

GaussDB全密态数据库等值查询

全密态数据库等值查询 可获得性 本特性自V500R001C20版本开始引入。 特性简介 密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传输、运算以及存储的各个环节始终都处于密文状态。当数据拥有者在客户端完成…

LeetCode - #134 加油站

文章目录 前言1. 描述2. 示例3. 答案关于我们前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新到 131 期,我们会保持更新时间和进度(周一…

开发中SQL积累

1.SQL中判断varchar类型是否为空? 检查 NULL 值: WHERE column_name IS NULL 检查空字符串: WHERE column_name 结合 NULL 和空字符串的检查: WHERE column_name IS NULL OR column_name 2.TRIM函数 作用:…

如何用Java爬虫“偷窥”淘宝商品类目API的返回值

在这个数据为王的时代,获取信息就像是在玩一场大型的寻宝游戏。而淘宝,作为电商界的巨人,其商品类目API就像是藏宝图上的秘密标记。今天,我们就来聊聊如何用Java爬虫技术,悄悄地“偷窥”这些宝藏。 准备工作&#xff1…