Dón*_*nal 90 javascript string concatenation
在我的团队中,我们通常会像这样进行字符串连接:
var url = // some dynamically generated URL
var sb = new StringBuffer();
sb.append("<a href='").append(url).append("'>click here</a>");
显然,以下内容更具可读性:
var url = // some dynamically generated URL
var sb = "<a href='" + url + "'>click here</a>";
但JS专家声称,+操作员的表现不如StringBuffer.append().这是真的吗?
Eri*_*ver 102
你的例子不是一个好的例子,因为表现不太可能显着不同.在您的示例中,可读性应该优于性能,因为一个与另一个的性能增益可以忽略不计.只有在进行多次连接时,数组(StringBuffer)的好处才会显而易见.即使这样,您的里程也可能取决于您的浏览器.
这是一个详细的性能分析,它显示了在许多不同浏览器中使用所有不同JavaScript连接方法的性能; 字符串性能分析

更多:
Ajaxian >> IE中的字符串性能:Array.join vs + = continue
pco*_*ran 46
Internet Explorer是当今世界上唯一真正受此影响的浏览器.(版本5,6和7是狗慢.8没有显示相同的退化.)而且,IE变得越来越慢,你的字符串越长.
如果你有连接的长字符串,那么肯定使用array.join技术.(或者为了便于阅读,可以使用一些StringBuffer包装.)但如果你的字符串很短,请不要打扰.
Fra*_*ger 31
同意迈克尔哈伦.
如果性能确实是一个问题,还要考虑使用数组和连接.
var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));
Rah*_*hul 18
试试这个:
var s = ["<a href='", url, "'>click here</a>"].join("");
JavaScript没有本机StringBuffer对象,所以我假设这是来自您正在使用的库,或者是一个不寻常的主机环境(即不是浏览器)的功能.
我怀疑一个库(用JS编写)会产生更快的速度,尽管可能是原生的StringBuffer对象.可以通过分析器找到明确的答案(如果您在浏览器中运行,那么Firebug将为您提供Firefox中的JS引擎的分析器).
小智 7
就像已经有一些用户注意到的那样:这与小字符串无关.
Firefox,Safari或Google Chrome中的新JavaScript引擎进行了优化
"<a href='" + url + "'>click here</a>";
和...一样快
["<a href='", url, "'>click here</a>"].join("");