Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取url参数的精简代码

获取url参数的精简代码

作者头像
mcq
发布于 2018-06-27 04:18:03
发布于 2018-06-27 04:18:03
2.8K00
代码可运行
举报
运行总次数:0
代码可运行

题目描述

获取 url 中的参数

  1. 指定参数名称,返回该参数的值 或者 空字符串
  2. 不指定参数名称,返回全部的参数对象 或者 {}
  3. 如果存在多个同名参数,则返回数组

输入例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')

输出例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[1, 2, 3]

方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getUrlParam(sUrl,sKey){    
    var result = {};    
    sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){        
        if(result[k] !== void 0){
            var t = result[k];
            result[k] = [].concat(t,v);
        }else{
            result[k] = v;
        }
    });
    if(sKey === void 0){
        return result;
    }else{ 
        return result[sKey] || '';
    }
}
思路其实都差不多:
  1. 匹配出key=value中的key和value;
  2. 需要返回对象,则匹配结果用对象存储起来,result[k] = v;
  3. 需要处理多个同名参数情况,利用concat拼接(concat返回的是数组副本)
  4. 需要考虑,输入了参数可是参数没对应,与没传入sKey 的情况

其实就是根据题目要求做出对应的返回,以及考虑问题要全面点(函数健壮性)。

可能有问题的地方

function(a,k,v),各输入参数是什么意思?

第一个参数a是整个匹配的字符串(例如上题,第一次会等于?key=1,第二次会等于key=2&,第三次会等于key=3&),接下来依次是正则里面的分组(小括号括起来为一组,),详情请查看正则表达式的replace方法。

为啥[].concat(t,v)不能写成t.concat(v)?

如果用t.concat(v),如果t不是数组,会变成字符串拼接。我们要用的concat方法是数组里那个。而第一个出现的t是字符串。

void 0 是啥?void有如下作用:
  1. 通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。
  2. 填充<a>的href确保点击时不会产生页面跳转; 填充<image>的src,确保不会向服务器发出垃圾请求。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
牛客网JS必刷题 01-10
泯泷、
2023/08/27
2570
49个常用JavaScript方法封装
https://segmentfault.com/a/1190000039220666
@超人
2021/07/29
5900
js取url参数
经常用到js取url的参数,记下来。 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 if (r != null) return unescape(r[2]); return null; //返回参
deepcc
2018/05/16
43.5K0
六则糟糕代码的优化方案
https://juejin.cn/post/6906366633741287437
@超人
2021/07/05
3810
六则糟糕代码的优化方案
常用的前端JavaScript方法封装
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157261.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
8890
100个常用的 JS 代码片段分享,值得你收藏
function cutstr(str, len) { var temp; var icount = 0; var patrn = /[^\x00-\xff]/; var strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr(i, 1); if (patrn.exec(temp) == null) { icount = icount + 1 } else { icount = icount + 2 } strre += temp } else { break } } return strre + "..." }
前端达人
2021/10/08
2.4K0
js获取URL参数
要在浏览器内访问查询的值,使用JavaScript,我们有一个特殊的API,称为URLSearchParam,它受到所有现代浏览器的支持:
IT工作者
2022/01/15
48.3K0
使用jquery获取url及url参数的方法
使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作
Jensen_97
2023/07/19
1.8K0
JavaScript 103 条技能
1、原生JavaScript实现字符串长度截取 function cutstr(str, len) { var temp; var icount = 0; var patrn = /[^\x00-\xff]/; var strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr
guanguans
2018/04/27
8830
JS开发常用工具函数
内置函数toString后的主体代码块为 [native code] ,而非内置函数则为相关代码,所以非内置函数可以进行拷贝(toString后掐头去尾再由Function转)
ConardLi
2019/07/04
2.4K0
QQ某业务主站DOM XSS挖掘与分析(绕过WAF)
上面这三句,很明显是可能会存在xss的。QSFL.$("headerFrame")是一个iframe对象,它的src属性可以为javascript协议,也就是:<iframe src=javascript:alert(1)>。所以只要能控制aNUrl["T"];的前部分,就能造成一个无需交互的DOM XSS。
phith0n
2020/10/15
9820
javascript/jquery获取地址栏url参数的方法
1、jquery获取url window.location.href; 2.通过javascript是如何获取url中的某个参数 function getUrlParam(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 if (r!=null) return unes
Yiiven
2022/12/15
2K0
JavaScript 笔试题(二)
上面代码中我们该判断了 result 的类型,在原生的 new 关键字上,如果你返回了一个对象,则接收时接收的会是这个对象,例如:
多云转晴
2020/04/27
5440
腾讯前端手写面试题及答案
函数柯里化概念: 柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
helloworld1024
2022/12/19
6710
原生态纯JavaScript 100大技巧大收集---你值得拥有(51--100)
56、原生JavaScript全角半角转换,iCase: 0全到半,1半到全,其他不转化
用户1272076
2019/03/26
1.4K0
工作中常用的JavaScript工具函数
如果文章和笔记能带您一丝帮助或者启发,请不要吝啬你的赞和收藏,你的肯定是我前进的最大动力? 附笔记链接,阅读往期更多优质文章可移步查看,喜欢的可以给我点赞鼓励哦:https://github.com/
前端迷
2020/06/04
1.2K0
第190天:js---String常用属性和方法(最全)
String常用属性和方法 一、string对象构造函数 1 /*string对象构造函数*/ 2 console.log('字符串即对象');//字符串即对象 3 //传统方式 - 背后会自动将其转换成对象 4 // 所以我们才可以访问string对象中方法 5 var zhangsan ='张三' 6 zhangsan.length; 7 //通过对象形式 8 var lisi = new String('李四'); 9
半指温柔乐
2018/09/11
3K0
Html获取Url参数
做web前端的开发很多的时候都会遇到的一个很简答的问题,就是两个页面之间的跳转,一般来说是:
何处锦绣不灰堆
2020/05/29
10.2K0
Html获取Url参数
JavaScript常见手写题熬夜整理
题目描述:有一组版本号如下 ['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5']。现在需要对其进行排序,排序的结果为 ['4.3.5','4.3.4.5','2.3.3','0.302.1','0.1.1']
helloworld1024
2022/09/22
9070
参数加密签名 & JS逆向
年少无知的时候经常在渗透测试报告上写一个漏洞,叫做明文传输漏洞。现在妥了,网站不仅开始采用 https,请求和响应包中的数据也加入了有效的加密措施,同时还会配有一些自定义的 http header 或者 cookie、前端混淆、字体加密等措施,感觉像是回旋镖,一下打中了多年后的自己
意大利的猫
2023/10/23
1.2K0
参数加密签名 & JS逆向
相关推荐
牛客网JS必刷题 01-10
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验