2010-04-24 14 views
4

JavaScript中的字符串是不可變的。在網絡和here on Stack Overflow as well,我整個陣列的方法來連接字符串:String.concat比Array方法加入字符串要慢

var a = []; 

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

我知道,這種方法比單純

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

更好地跳過創建中間對象,但怎麼做的原因這公平對更好:

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

Dupe:http://stackoverflow.com/questions/112158/javascript-string-concatenation – 2010-04-24 06:07:37

+0

我會爭辯說,「更好」的定義是錯誤的: -/ – 2010-04-24 06:35:12

+0

如果你已經看過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

回答

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'); 

結果火狐 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 
+0

不應該將數組的創建計算在內,因爲僅在使用concat時不需要使用它。無論哪種方式,對於10k concat中的那些4ms,我不會使用一些奇怪的數組加入(在大多數情況下)。 – Wikser 2010-04-24 06:01:55

+0

@Wikser:添加了該測試。現在你有更多的理由避免奇怪的加入:) – 2010-04-24 06:06:49

1

你的問題斷言使用數組.join比純字符串連接更快。簡單的答案是:只有在IE中這是真的。

其他瀏覽器已優化+運算符,以至於使用數組或其他方法會適得其反。