题目描述:
获取 url 中的参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
4. 不支持URLSearchParams方法
示例:
输入:两个参数
http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出:
[1, 2, 3]
function getUrlParam(sUrl, sKey) { var paramArr = sUrl.split(‘?‘)[1].split(‘#‘)[0].split(‘&‘); // 取出每个参数的键值对放入数组 const obj = {}; paramArr.forEach(element => { const [key, value] = element.split(‘=‘); // 取出数组中每一项的键与值 if(obj[key] === void 0){ // 表示第一次遍历这个元素,直接添加到对象上面,此处 void 0 与undefined作用相同 obj[key]=value } else{ obj[key]=[].concat(obj[key],value); // 表示不是第一次遍历说明这个键已有,通过数组存起来。 }}); return sKey===void 0? obj:obj[sKey]||‘‘ // 如果该方法为一个参数,则返回对象。 //如果为两个参数,sKey存在,则返回值或数组,否则返回空字符。 }
测试结果:
1.有参数sKey
console.log(getUrlParam(‘http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe‘,‘key‘))
2.无参数sKey
console.log(getUrlParam(‘http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe‘))
知识点:
1.split()会分割字符串并且返回一个数组(不改变原字符串);
2.concat()会连接两个及两个以上数组;
例子:
var hege = ["Cecilie", "Lone"]; var stale = ["Emil", "Tobias", "Linus"]; var kai = ["Robin"]; var children = hege.concat(stale,kai);
3.void 0 与undefined:
一般情况下,void 后面加的任何式子都是undefined,之所以使用void 0 ,我觉得是因为void 0 比较短;
例子:
console.log(void 0) console.log(void 66) console.log(void ‘hello world!‘)
运行结果: