62

我知道做类似的事情

var a = "hello";
a += " world";

它相对非常慢,因为浏览器在O(n). 在不安装新库的情况下,有没有更快的方法?

4

2 回答 2

29

这个问题已经回答了,但是当我第一次看到它时,我想到了 NodeJS Buffer。但它比 + 慢得多,因此在字符串连接中没有什么比 + 更快的了。

使用以下代码进行测试:

function a(){
    var s = "hello";
    var p = "world";
    s = s + p;
    return s;
}

function b(){
    var s = new Buffer("hello");
    var p = new Buffer("world");
    s = Buffer.concat([s,p]);
    return s;
}

var times = 100000;

var t1 = new Date();
for( var i = 0; i < times; i++){
    a();
}

var t2 = new Date();
console.log("Normal took: " + (t2-t1) + " ms.");
for ( var i = 0; i < times; i++){
    b();
}

var t3 = new Date();

console.log("Buffer took: " + (t3-t2) + " ms.");

输出:

Normal took: 4 ms.
Buffer took: 458 ms.
于 2012-12-14T00:31:58.840 回答
14

JavaScript 中实际上没有任何其他方法可以连接字符串。
理论上你可以使用.concat(),但这比仅仅+

库通常比原生 JavaScript 慢,尤其是在字符串连接或数值操作等基本操作上。

简单地说:+是最快的。

于 2012-12-13T12:15:17.490 回答