这段代码用来生成 URI 中的查询字符串。

例如,有一个 object 的内容如下:

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

好看的代码应该是怎么样的:

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

如果希望更好看点,也可以使用 URI.js 来做这件事。

难看的版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 实现得不够简洁。
全文完

留言

2017-08-08
次访问