我正在检查别人写的一些代码,我对JS还是比较陌生的,我对我所看到的模式有一个问题。
我发现在数组上使用.join()然后.split(',')的下面模式在这个旧代码的几个地方创建一个新数组,通常处理解析从HTTP请求返回的数据,但并非总是如此。我不明白这其中的原因。下面是我想知道的片段,然后是一个更大的片段来提供上下文。
var first = ['listColumn1','listColumn2','listColumn3'].join();
var headers = first.split(',');
function getEntityLookup(){
$.ajax({
type:"GET",
url:uri,
dataType: "json",
async: true,
success: parseData,
failure: function(data) {console.log("Error - could not be found");}
})
}
function parseData(result){
console.log(result);
var first = ['listColumn1','listColumn2','listColumn3'].join();
var headers = first.split(',');
for ( var i = 0, length = result.length; i < length; i++ ){
var myRow = result[i].join();
var row = myRow.split(',');
var data = {};
for ( var x = 0; x < row.length; x++ ){
data[headers[x]] = row[x];
}
jsonData.push(data);
}
为什么会有人这样做?first
和myRow
不再被引用。
我可以看到这样做的目的,如果你试图复制一个数组,并希望有两个单独的引用,所以你不只是得到一个复制的引用(我知道足够知道有两个变量引用相同的实际数组在内存中的潜力,如果你这样做错了,但我想可能有一个更好的方法来做一个单独的内存分配比。join()然后。split(','));然而,在我用这种模式查看的任何代码中,第一个数组都不会再被引用,所以在这种情况下,这似乎不是目的。
如果first和myRow在此操作之后不再被引用。这可能意味着它们是用于测试的,或者是全局变量,或者开发人员忘记删除它们。在任何情况下,如果您询问操作的顺序,首先使用.join()
,因为您不能在数组上.slice()
(见这里)。所以他首先使用.join()将它变成一个字符串,返回一个新字符串。