我看到了一些代码项目解决方案。
但是JavaScript中有常规的实现吗?
我看到了一些代码项目解决方案。
但是JavaScript中有常规的实现吗?
当前回答
对于那些感兴趣的人,这里有一个调用Array.join的替代方案:
var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);
正如预期的那样,输出是字符串'foobar'。在Firefox中,这种方法优于Array。连接,但性能优于+连接。因为字符串。concat要求将每个段指定为单独的参数,调用者会受到执行JavaScript引擎施加的参数计数限制。有关更多信息,请参阅Function.prototype.apply()的文档。
其他回答
我刚刚在http://jsperf.com/javascript-concat-vs-join/2上重新检查了性能。 测试用例连接或连接字母表1000次。
在当前的浏览器(FF, Opera, IE11, Chrome)中,“concat”比“join”快4-10倍。
在IE8中,两者返回的结果大致相同。
不幸的是,在IE7中,“join”要快100倍。
对于那些感兴趣的人,这里有一个调用Array.join的替代方案:
var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);
正如预期的那样,输出是字符串'foobar'。在Firefox中,这种方法优于Array。连接,但性能优于+连接。因为字符串。concat要求将每个段指定为单独的参数,调用者会受到执行JavaScript引擎施加的参数计数限制。有关更多信息,请参阅Function.prototype.apply()的文档。
这段代码看起来就像您想要的路线,只是做了一些更改。
您将希望将append方法更改为如下所示。我将其更改为接受数字0,并使其返回this,以便您可以链接您的追加。
StringBuilder.prototype.append = function (value) {
if (value || value === 0) {
this.strings.push(value);
}
return this;
}
在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);
如果您必须为Internet Explorer编写代码,请确保您选择了使用数组连接的实现。用+或+=操作符连接字符串在IE上非常慢。对于IE6来说尤其如此。在现代浏览器中+=通常和数组连接一样快。
当我必须做很多字符串连接时,我通常填充一个数组,不使用字符串构建器类:
var html = [];
html.push(
"<html>",
"<body>",
"bla bla bla",
"</body>",
"</html>"
);
return html.join("");
注意,push方法接受多个参数。