String.concat是否比Array方法更慢地连接字符串

时间:2010-04-24 05:48:40

标签: javascript

JavaScript中的字符串是不可变的。在整个网络和here on Stack Overflow as well中,我遇到了连接字符串的Array方法:

var a = []; 

a.push(arg1,arg,2....);
console.log(a.join(''));

我知道这种方法比简单的

更好
console.log(arg1 + arg2 +.....);

出于跳过创建中间对象的原因,但它如何更好地反对:

arg1.concat(arg2,arg3.....);

2 个答案:

答案 0 :(得分:3)

对于它可能的数量,我尝试了以下测试:

var stringA = 'someStringA';
var stringB = 'someStringB';
var stringC = 'someStringC';

var arr = [];
arr.push(stringA);
arr.push(stringB);
arr.push(stringC);

// Testing the concat method
i = 0;
console.time('10k concat');
while (i < 10000) {
    stringA.concat(stringB, stringC);
    i++;
}
console.timeEnd('10k concat');

// Testing the join method
i = 0;
console.time('10k join');
while (i < 10000) {
    arr.join(''); 
    i++;
}
console.timeEnd('10k join');

Mac OS X 10.6.2上 Firefox 3.6.3的结果:

10k concat: 20ms
10k join: 15ms

10k concat: 20ms
10k join: 16ms

10k concat: 19ms
10k join: 15ms

Mac OS X 10.6.2上 Chrome 5.0的结果:

10k concat: 22ms
10k join: 14ms

10k concat: 20ms
10k join: 16ms

10k concat: 20ms
10k join: 16ms

<强>更新

如果我们在join('')测试中计算数组创建,我们会看到一个不同的故事。测试:

var stringA = 'someStringA';
var stringB = 'someStringB';
var stringC = 'someStringC';

// Testing the concat method
i = 0;
console.time('10k concat');
while (i < 10000) {
    stringA.concat(stringB, stringC);
    i++;
}
console.timeEnd('10k concat');

// Testing the join method
i = 0;
console.time('10k join');
while (i < 10000) {
    var arr = [];
    arr.push(stringA);
    arr.push(stringB);
    arr.push(stringC);
    arr.join(''); 
    i++;
}
console.timeEnd('10k join');

Mac OS X 10.6.2上 Firefox 3.6.3的结果:

10k concat: 20ms
10k join: 40ms

10k concat: 21ms
10k join: 40ms

10k concat: 20ms
10k join: 42ms

Mac OS X 10.6.2上 Chrome 5.0的结果:

10k concat: 20ms
10k join: 55ms

10k concat: 22ms
10k join: 60ms

10k concat: 19ms
10k join: 60ms

答案 1 :(得分:1)

您的问题断言使用数组.join比纯字符串连接更快。简短的回答是:只有IE才是真的。

其他浏览器已对+运算符进行了优化,因此使用数组或其他方法会适得其反。