Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以更好的方式编写此查询字符串?_Javascript_Refactoring_Query String - Fatal编程技术网

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

我在JavaScript中看到了一行用于构造查询字符串的代码:

    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引擎优化似乎已经改变了这一切。谢谢你指出这一点。但是还有很多其他因素,比如你使用什么浏览器,什么版本。您必须了解大多数用户使用的浏览器,并为此进行优化。