前景介绍:在刷题的时候遇到了一个问题,也学习了其他大佬的实现方法。我就记录在这里,作为学习和分享。问题描述获取url中指定参数名的参数,并返回参数的值或空String未指定参数名,返回所有参数对象或{}如果有多个同名参数,则返回数组不支持URLSearchParams方法示例输入:http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehekey输出:[1,2,3]implementfunctiongetUrlParam(sUrl,sKey){varparamArr=sUrl.split('?')[1].split('#')[0].split('&');//取出每个参数的键值对,放入一个数组中constobj={};paramArr.forEach(element=>{const[key,value]=element.split('=');//取出数组中每一项的key和valueif(obj[key]===void0){//表示第一次遍历该元素,直接添加到对象中obj[key]=value}else{obj[key]=[].concat(obj[key],value);//表示不是第一次遍历说明这个key已经存在了,并且存在数组中。}});返回sKey===void0?obj:(obj[sKey]||'')console.log(getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test1=4#hehe'))//{key:['1','2','3'],test1:'4'}}这里分析void0的用法对我来说比较陌生,所以查了一下是什么意思,其实在MDN的介绍中有提到undefined也就是说,void0是undefined的替代,void0===undefined的结果为真。其实void关键字已经不是第一次出现了,还有一个集中的使用方法:returnsKey===void0?obj:obj[sKey]||''void0===undefined判断为真。上面的公式判断函数中是否传入了sKey参数。如果传入获取的值,则不传入之前的值。当为undefined或null时,取之前的值,否则转到最后一个值"javascript:void(alert('hahaha'))">点击题外话比烂笔头好记。记录void(0)的时候,顺便想起了另外几个特殊的逻辑运算符。这里也有一句话??(nullvaluecoalescingoperator)nullvaluecoalescingoperator当左边的值不为`nullandundefined`时返回右边的值,否则返回左边的值。||(逻辑或运算符)逻辑或运算符当左边的值为假时返回右边的值,否则返回左边的值。?。(optionalchainingoperator)类似于`.`操作符,但不同的是当他的引用为空时(`nullandundefined`),不会报错。&&(逻辑与)逻辑与运算符需要在左右两边的值都为真时为真。否则为假。结语这里记录的可能不是很完整,包括如果有些描述不准确,欢迎并希望大家帮忙指出,共同学习进步
