對於什麼是可以算,我嘗試以下測試:
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');
結果火狐 3.6.3在Mac OS X 10.6.2:
10k concat: 20ms
10k join: 15ms
10k concat: 20ms
10k join: 16ms
10k concat: 19ms
10k join: 15ms
結果鉻 5.0在Mac OS X 10.6.2:
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');
結果火狐3.6.3在Mac OS X 10.6.2:
10k concat: 20ms
10k join: 40ms
10k concat: 21ms
10k join: 40ms
10k concat: 20ms
10k join: 42ms
結果鉻 5.0在Mac OS X 10.6.2:
10k concat: 20ms
10k join: 55ms
10k concat: 22ms
10k join: 60ms
10k concat: 19ms
10k join: 60ms
Dupe:http://stackoverflow.com/questions/112158/javascript-string-concatenation – 2010-04-24 06:07:37
我會爭辯說,「更好」的定義是錯誤的: -/ – 2010-04-24 06:35:12
如果你已經看過http://stackoverflow.com/questions/51185/are-javascript-strings-immutable-do -i-need-a-string-builder-in-js,你怎麼能假定調用Array.join總是更好?在這篇文章中有很多測試證明它在IE和FF中更快。對於WebKit,堅持串聯。 – 2011-06-29 18:37:21