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.....);
答案 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才是真的。
其他浏览器已对+运算符进行了优化,因此使用数组或其他方法会适得其反。