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

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


当前回答

下面是Typescript中StringBuilder类的一个快速示例:

export class StringBuilder {
  private _lines: string[] = [];

  write(line: string = ""): void {
    this._lines.push(line);
  }

  writeln(line: string = ""): void {
    this._lines.push(line);
    this._lines.push("\n");
  }

  toString(): string {
    return this._lines.join("");
  }
}

你可以像下面这样使用:

const sb = new StringBuilder();
sb.write("Hello World");
sb.writeln("!");
console.log(sb.toString());

其他回答

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

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

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

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

下面是Typescript中StringBuilder类的一个快速示例:

export class StringBuilder {
  private _lines: string[] = [];

  write(line: string = ""): void {
    this._lines.push(line);
  }

  writeln(line: string = ""): void {
    this._lines.push(line);
    this._lines.push("\n");
  }

  toString(): string {
    return this._lines.join("");
  }
}

你可以像下面这样使用:

const sb = new StringBuilder();
sb.write("Hello World");
sb.writeln("!");
console.log(sb.toString());

如果您必须为Internet Explorer编写代码,请确保您选择了使用数组连接的实现。用+或+=操作符连接字符串在IE上非常慢。对于IE6来说尤其如此。在现代浏览器中+=通常和数组连接一样快。

当我必须做很多字符串连接时,我通常填充一个数组,不使用字符串构建器类:

var html = [];
html.push(
  "<html>",
  "<body>",
  "bla bla bla",
  "</body>",
  "</html>"
);
return html.join("");

注意,push方法接受多个参数。

EDIT

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

原来的答案

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

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

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