用生命谱写代码的赞歌

0%

生成 URI 中的查询字符串

如果,有一个object如下:

1
2
var obj = {a: '100', b: '200'}
console.log(makeParamsString(obj, true) === 'a=100&b=200') // true

想要生成 URI 中的查询字符串一般会这么写:

1
2
3
4
5
6
7
8
9
10
11
12
13
var makeParamsString = function(obj, addAsk) {
var result = ''
if (addAsk){
result += '?'
} else {
result += '&'
}
for(var i in obj){
result += i + '=' + obj[i] + '&'
}
result = result.substr(0, result.length-1)
return result;
}

以上写法稍微有些瑕疵:

  1. substr 仅仅为了去掉最后一个 & ,完全可以避免
  2. for 循环中的 += 会占用更多的内存
  3. addAsk 实现得不够简洁

可以适当改写为以下版本:

1
2
3
4
5
6
7
var makeParamsString = function(obj, addAsk) {
let ret = []
for (let d in obj) {
ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(obj[d]))
}
return (addAsk ? '?' : '') + ret.join('&')
}

如果希望更好看一些,也可以使用 URI.js