【2】获取 url 参数
获取 url 中的参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
4. 不支持URLSearchParams方法
示例1
输入:http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出:[1, 2, 3]
1 function getUrlParam(sUrl, sKey) { 2 var result = {}; 3 sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){ 4 if(result[k] !== void 0){ 5 var t = result[k]; 6 result[k] = [].concat(t,v); 7 }else{ 8 result[k] = v; 9 } 10 }); 11 if(sKey === void 0){ 12 return result; 13 }else{ 14 return result[sKey] || ''; 15 } 16 }
1 function getUrlParam(sUrl, sKey) { 2 // 返回?后面#前面的 3 let sParam = sUrl.split("?")[1].split("#")[0]; // key=1&key=2&key=3&test=4 4 // 进一步将参数分割为数组 5 let arr = sParam.split("&"); // ["key=1","key=2","key=3","test=4"] 6 // 结果 7 let res; 8 if( sKey ){ // 如果指定参数 9 // 结果为数组 10 res = []; 11 for (let i = 0; i < arr.length; i++) { 12 // 分割为键值对 13 let temp = arr[i].split("="); 14 // 存储指定key值的结果 15 if(temp[0] === sKey){ 16 res.push(temp[1]); 17 } 18 } 19 if (res.length === 1) { 20 // 长度为1,返回字符串 21 return res[0]; 22 } else if(res.length === 0){ 23 // 长度为0,返回空字符串 24 return ""; 25 } else { 26 // 长度大于1返回数组 27 return res; 28 } 29 30 } else { // 如果不指定参数 31 // 结果为对象 32 res = {}; 33 if(sParam === undefined || sParam === "" ){ 34 return res; 35 } 36 for (let i = 0; i < arr.length; i++) { 37 // 分割为键值对 38 let temp = arr[i].split("="); 39 // 判断是否已存在结果 40 if(!(temp[0] in res)){ 41 // temp[0]为键,temp[1]的数组为值 42 res[temp[0]] = []; 43 } 44 // 使用变量动态访问对象属性用obj[a]不能用obj.a 45 res[temp[0]].push(temp[1]); 46 } 47 48 } 49 return res; 50 }
1. URL的组成
https://user:pass@www.baidu.com:80/index.html?type=1&name=2#haha
http/https:协议
user:pass:登录认证
www.baidu.com:域名,服务器地址
:80:端口地址
/index.html:请求资源文件路径
?type=1&name=2:查询字符串,携带参数,给服务器传的内容
#haha:哈希,片段标识符
2.String.split(separator, limit):字符串分割成数组的方法,里面的参数是以什么分割,如果不传就是空字符串为分割,返回值是一个数组。
3.void是一元运算符,出现在操作数的左边,操作数可以是任意类型的值,void右边的表达式可以是带括号形式(例如:void(0)),也可以是不带括号的形式(例如void 0)。 使用void 0比使用undefined能够减少3个字节
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理