我看到了一些代码项目解决方案。

但是JavaScript中有常规的实现吗?


当前回答

这段代码看起来就像您想要的路线,只是做了一些更改。

您将希望将append方法更改为如下所示。我将其更改为接受数字0,并使其返回this,以便您可以链接您的追加。

StringBuilder.prototype.append = function (value) {
    if (value || value === 0) {
        this.strings.push(value);
    }
    return this;
}

其他回答

我刚刚在http://jsperf.com/javascript-concat-vs-join/2上重新检查了性能。 测试用例连接或连接字母表1000次。

在当前的浏览器(FF, Opera, IE11, Chrome)中,“concat”比“join”快4-10倍。

在IE8中,两者返回的结果大致相同。

不幸的是,在IE7中,“join”要快100倍。

StringBuilder JavaScript尝试这个..

function StringBuilder(value) { this.strings = new Array(); this.append(value); } StringBuilder.prototype.append = function (value) { if (value) { this.strings.push(value); } } StringBuilder.prototype.clear = function () { this.strings.length = 0; } StringBuilder.prototype.toString = function () { return this.strings.join(""); } var sb = new StringBuilder(); sb.append("This is"); sb.append("much better looking"); sb.append("than using +="); var myString = sb.toString(); sb.clear();

EDIT

不,没有内置类。但是,字符串字面值可能是一种合适的变通方法。

原来的答案

JavaScript的ECMAScript 6版本(又名ECMAScript 2015)引入了字符串字面量。

var classType = "stringbuilder";
var q = `Does JavaScript have a built-in ${classType} class?`;

注意,将字符串括起来的是反勾号,而不是单引号。

对于那些感兴趣的人,这里有一个调用Array.join的替代方案:

var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);

正如预期的那样,输出是字符串'foobar'。在Firefox中,这种方法优于Array。连接,但性能优于+连接。因为字符串。concat要求将每个段指定为单独的参数,调用者会受到执行JavaScript引擎施加的参数计数限制。有关更多信息,请参阅Function.prototype.apply()的文档。

在c#中,你可以这样做

 String.Format("hello {0}, your age is {1}.",  "John",  29) 

在JavaScript中,你可以这样做

 var x = "hello {0}, your age is {1}";
 x = x.replace(/\{0\}/g, "John");
 x = x.replace(/\{1\}/g, 29);