new URLSearchParams()获取不到第一个参数了?

1,879 阅读1分钟

我正是蠢,他奶奶的。 同事给我反馈:老弟参数有部分识别不出来了。我正想怼他,你丫的是不是不会用? 然而,好像确实有一些参数没有识别出来。准确来说,都是第一个参数没识别出来。 获取url参数的方法是new URLSearchParams,前两天逛知乎看到的这个方法,觉得很有用,就在项目中用上了。

先看一个例子:
//手写一个识别url参数的函数
let getUrlPar = (name,url)=>{
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var sxurl = '?'+ url.split('?')[1];
    var r = sxurl.substr(1).match(reg);
    if (r != null) return decodeURI(r[2]); return null;
}
let url = 'https://cn.bing.com/search?q=编码&qs=n&form=QBLH&sp=-1&pq=编码&sc=8-2&sk=&cvid=3BE226158EC04951A6AEB77ABC5C88CC';

getUrlPar('q',url); //"编码"
getUrlPar('qs',url); //"n"

new URLSearchParams(url).get('q') // null
new URLSearchParams(url).get('qs') // "n"

为什么“?”后面的第一个参数返回是unll呢?都怪我,看什么知乎,去看看官方文档他不香吗?

解决办法:
//将url地址中的参数部分拿出来就可以了
//split('?')[1] 将url以?分割后取索引为1
new URLSearchParams(url.split('?')[1]).get('q') // "编码"
new URLSearchParams(url.split('?')[1]).get('qs') // "n"
//当然这样也行
let nurl = new URL(url);
new URLSearchParams(nurl.search.substring(1)).get('q') // "编码"
new URLSearchParams(nurl.search.substring(1)).get('qs') // "n"