简短的回答:使用array.join方法。
详细的解释:
首先,字符串拼接不如使用array.join()方法快,而是更慢。这是因为每次拼接都会销毁两个字符串并创建一个新的字符串。
考虑下面的代码:
<script>
function concat(){
var txt = '';
for (var i = 0; i < 1000000; i++){
txt =+ i + ',';
}
}
function arr(ar){
var txt = 'asdf' + ar;
}
ar = [];
for (var i = 0; i < 1000000; i++) {
ar.push(i);
}
concat();
arr(ar);
alert('done!');
</script>
将它粘贴到一个html文件中。然后对其进行剖析。在我的机器上(core i7EE,16GB RAM,SSD磁盘,IE9),arr()花费0毫秒,而concat()花费12毫秒。请记住,这是超过一百万次迭代的(在IE6上,相同的测试会非常不同,concat()需要几秒钟)。
其次,当只有两个值时,连接将与array.join相同。所以对于您的示例,从性能的角度来看,它们都是等效的。如果您将上述代码将1000000更改为4,则concat和arr均需要执行0ms。这意味着您特定流程的差异要么不存在,要么非常微不足道,无法在配置文件中显示。
第三,现代浏览器使用array.join()优化字符串连接,因此从性能角度来看,讨论可能是无用的。
那就留下样式。就我个人而言,我不会使用第一种形式,因为我不喜欢手动连接字符串(当你有2个变量时,这是相当简单的,但如果你有10个变量呢?那将成为一行非常长的代码。如果您收到一个包含n个值的数组,那该怎么办?for循环进入)。我也不会使用第二种形式,因为正如另一个答案中指出的那样,该值被强制转换为字符串,这意味着一些隐式的转换正在进行。问题在于隐含的部分。我现在知道数组在被强制转换时使用逗号连接,但如果规范发生变化或某个天才决定更改代码库中Array.prototype的toString实现会发生什么?只是为了好玩在jsfiddle中运行此命令:
Array.prototype.toString = function() {
return 'not the expected result!';
}
alert([1, 2]);
你能猜出答案吗?(上面的代码将执行与您的代码相同类型的数组转换。通过toString()方法进行强制转换)
如果您使用array.join(','),您将通过声明以下内容使您的代码具备未来性:1)无论toString实现如何,都将连接您的数组;2)它将用逗号连接。