令我失望的是,其他答案中沒有人將「最佳方式」解釋為「最快方式」...
我從這裡提取了兩個(gè)範(fàn)例,並添加了str。 join()
和 str.reduce()
來自上面 nishanths 的回答。以下是我在 Linux 上的 Firefox 77.0.1 上的結(jié)果。
注意:我在測(cè)試這些時(shí)發(fā)現(xiàn),如果我將str = str.concat()
和str =
直接放在之前或之後彼此之間,第二個(gè)總是表現(xiàn)得更好一些...所以我單獨(dú)運(yùn)行這些測(cè)試並評(píng)論其他測(cè)試的結(jié)果...
即使如此,如果我重新運(yùn)行它們,它們的速度也會(huì)很大變化,所以我每個(gè)都測(cè)量了 3 次。
一次 1 個(gè)字元:
str = str.concat()
:841、439、956 毫秒 / 1e7 concat() 的
............str =
:949、1130、664 毫秒 / 1e7 ='s
.......[].join()
: [] 中有 3350, 2911, 3522 ms / 1e7 個(gè)字元
#......[].reduce()
:[] 中的 3954、4228、4547 毫秒 / 1e7 個(gè)字元
#一次 26 個(gè)字串:
str = str.concat()
:444、744、479 毫秒 / 1e7 concat() 的
............str =
:1037, 473, 875 毫秒 / 1e7 ='s
........[].join()
: 2693, 3394, 3457 ms / 1e7 字串在 []
#......[].reduce()
:[] 中的 2782、2770、4520 ms / 1e7 字串
#所以,無論是一次附加1個(gè)字元還是一次附加26個(gè)字串:
str = str.concat()
和 str =
之間的平手[].reduce()
,然後是 [].join()
我的程式碼,易於在瀏覽器控制臺(tái)中運(yùn)行:
{ console.clear(); let concatMe = 'a'; //let concatMe = 'abcdefghijklmnopqrstuvwxyz'; //[].join() { s = performance.now(); let str = '', sArr = []; for (let i = 1e7; i > 0; --i) { sArr[i] = concatMe; } str = sArr.join(''); e = performance.now(); console.log(e - s); console.log('[].join(): ' + str); } //str += { s = performance.now(); let str = ''; for (let i = 1e7; i > 0; --i) { str += concatMe; } e = performance.now(); console.log(e - s); console.log('str +=: ' + str); } //[].reduce() { s = performance.now(); let str = '', sArr = []; for (let i = 1e7; i > 0; --i) { sArr[i] = concatMe; } str = sArr.reduce(function(pre, next) { return pre + next; }); e = performance.now(); console.log(e - s); console.log('[].reduce(): ' + str); } //str = str.concat() { s = performance.now(); let str = ''; for (let i = 1e7; i > 0; --i) { str = str.concat(concatMe); } e = performance.now(); console.log(e - s); console.log('str = str.concat(): ' + str); } 'Done'; }
使用ES6,你可以使用
範(fàn)本字串: p>
var username = 'craig'; console.log(`hello ${username}`);
ES5 及以下版本:
使用
運(yùn)算子
var username = 'craig'; var joined = 'hello ' + username;
字串的 concat (..)
var username = 'craig'; var joined = 'hello '.concat(username);
或者,使用陣列方法:
var username = 'craig'; var joined = ['hello', username].join(' ');
或更奇特,reduce(..) 與上述任何一項(xiàng)組合:
var a = ['hello', 'world', 'and', 'the', 'milky', 'way']; var b = a.reduce(function(pre, next) { return pre + ' ' + next; }); console.log(b); // hello world and the milky way