Javascript 如何以更好的方式编写此查询字符串?
我在JavaScript中看到了一行用于构造查询字符串的代码:Javascript 如何以更好的方式编写此查询字符串?,javascript,refactoring,query-string,Javascript,Refactoring,Query String,我在JavaScript中看到了一行用于构造查询字符串的代码: var queryParameters = "imagePath=" + encodeURIComponent(_image.source) + "&saveMode=" + saveMode + "&pageFolderId=" + pageFolderId + "&id=" + pageId + "&parent=" + parent; queryParameters += "&a
var queryParameters = "imagePath=" + encodeURIComponent(_image.source) + "&saveMode=" + saveMode + "&pageFolderId=" + pageFolderId + "&id=" + pageId + "&parent=" + parent;
queryParameters += "&quality=" + sQuality.value + "&commands=" + commandQueue.Serialize();
有更好的方法写这个吗?您可以使用换行符:
var queryParameters = "imagePath=" + encodeURIComponent(_image.source)
+ "&saveMode=" + saveMode
+ "&pageFolderId=" + pageFolderId
+ "&id=" + pageId
+ "&parent=" + parent
+ "&quality=" + sQuality.value
+ "&commands=" + commandQueue.Serialize();
可以使用换行符:
var queryParameters = "imagePath=" + encodeURIComponent(_image.source)
+ "&saveMode=" + saveMode
+ "&pageFolderId=" + pageFolderId
+ "&id=" + pageId
+ "&parent=" + parent
+ "&quality=" + sQuality.value
+ "&commands=" + commandQueue.Serialize();
您可以将所有数据放入一个数组,然后执行联接。一般来说,数组的连接比串联更快,但若不多次构建此字符串,则不会有什么不同
var arr = [];
arr[1] = "item1";
arr[2] = "item2";
arr[3] = "item3";
var result = arr.join('');
这样编写也可以提高可读性和调试。您可以很容易地注释一个参数。您可以将所有数据放入一个数组,然后执行联接。一般来说,数组的连接比串联更快,但若不多次构建此字符串,则不会有什么不同
var arr = [];
arr[1] = "item1";
arr[2] = "item2";
arr[3] = "item3";
var result = arr.join('');
这样编写也可以提高可读性和调试。您可以很容易地注释一个参数。如果您使用jQuery,您可以只使用表示查询字符串选项的对象:
var queryParameters = jQuery.param({
imagePath: _image.source,
saveMode: saveMode,
pageFolderId: pageId,
// ...
});
jQuery将自动对查询字符串值进行编码,因此您无需在
\u image.source
上调用encodeURIComponent
。有关更多信息,请参见:如果使用jQuery,则可以使用表示查询字符串选项的对象:
var queryParameters = jQuery.param({
imagePath: _image.source,
saveMode: saveMode,
pageFolderId: pageId,
// ...
});
jQuery将自动对查询字符串值进行编码,因此您无需在\u image.source
上调用encodeURIComponent
。有关更多信息,请参见:如何:
function qSerialize(obj){
var q = [];
for (var l in obj) {
if (obj.hasOwnProperty(l)){
q.push(l+'='+obj[l]);
}
}
return q.join('&');
}
var qParamStr = qSerialize(
{
imagePath: encodeURIComponent(_image.source),
saveMode: saveMode,
pageFolderId: pageFolderId,
id: pageId,
parent: parent,
quality: sQuality.value,
commands: commandQueue.Serialize()
}
);
那么:
function qSerialize(obj){
var q = [];
for (var l in obj) {
if (obj.hasOwnProperty(l)){
q.push(l+'='+obj[l]);
}
}
return q.join('&');
}
var qParamStr = qSerialize(
{
imagePath: encodeURIComponent(_image.source),
saveMode: saveMode,
pageFolderId: pageFolderId,
id: pageId,
parent: parent,
quality: sQuality.value,
commands: commandQueue.Serialize()
}
);
这条线有什么问题?你在找更容易阅读的东西吗?这行有什么问题吗?你在寻找更容易阅读的东西吗?加入数组的速度曾经更快,但JavaScript引擎优化似乎已经改变了这一切。谢谢你指出这一点。但是还有很多其他因素,比如你使用什么浏览器,什么版本。你必须了解大多数用户都有哪些浏览器,并对其进行优化。加入阵列的速度曾经更快,但JavaScript引擎优化似乎已经改变了这一切。谢谢你指出这一点。但是还有很多其他因素,比如你使用什么浏览器,什么版本。您必须了解大多数用户使用的浏览器,并为此进行优化。