JavaScript 怎样高效拼接字符串?

 我来答
黑马程序员
2016-09-22 · 改变中国IT教育,我们正在行动
黑马程序员
黑马程序员为大学毕业后,有理想、有梦想,想从事IT行业的年轻人改变自己的命运。黑马程序员成就IT黑马
向TA提问
展开全部

就像在C#中一样,可以使用”+”来拼接字符串,而对于操作频繁、讲究效率的字符串拼接操作应该选择StringBuilder类。在JavaScript中是否也存在这个问题呢?答案是肯定的,虽然JavaScript并没有为提供一个内置的StringBuilder对象,但是可以自己来创建一个!至于效率到底能提高多少,让程序说话吧!

//---StringBuilder---
function StringBuilder(){
this.__string__ = new Array();
}
StringBuilder.prototype.append = function(str){
this.__string__.push(str);
}
StringBuilder.prototype.toString = function(){
return this.__string__.join("");
}
 
var d1 = new Date();
var buffer = new StringBuilder();
for(var i = 1; i < 10000; i++){
buffer.append("E3Card");
}
var strResult = buffer.toString();
var d2 = new Date();
 
document.write("StringBuilder用时:" + (d2.getTime() - d1.getTime()) + "<br/>");
 
//---+-----
var d3 = new Date();
var str = "";
for(var i = 1; i < 10000; i++){
str += "E3Card";
}
var d4 = new Date();
document.write("+链接用时:" + (d4.getTime() - d3.getTime()) + "<br/>");

在机器上(Core2 3.0G/4GRAM),反复F5后得到一个,比较平稳的测试结果:

StringBuilder用时:32
+链接用时:1109

哇哦,30多倍,没看错吧!

好了,赶紧自己做好一个Lib,以后都用这个StringBuilder吧:

function StringBuilder(){
this.__string__ = new Array();
}
StringBuilder.prototype.append = function(str){
this.__string__.push(str);
}
StringBuilder.prototype.toString = function(){
return this.__string__.join("");
}
果爸老石
2016-06-16 · TA获得超过813个赞
知道小有建树答主
回答量:538
采纳率:75%
帮助的人:178万
展开全部
(1)新版本的浏览器对拼接字符串做了优化,如果不是要兼容比较老的浏览器比如IE6,可以不做优化
(2)优化一般从两个地方着手
a.如果是for(var i=0;i<arr.length;i++),在这里面拼接,可以在循环外边用一个变量缓存一下arr.length,把i<arr.length改成i<缓存的那个变量,这样不用每次取length.
b.把要拼接的字符串都push到一个js数组里,再用数组的join方法,以空字符串join,这样就不会有过多的字符串创建和销毁,从而提高效率.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HHPpeace888
2016-05-24 · TA获得超过565个赞
知道小有建树答主
回答量:529
采纳率:66%
帮助的人:367万
展开全部
模拟JAVA的StringBuffer这种缓冲机制,其原理是利用数组进行拼接,源代码如下:

function StringBuffer() {
this.__strings__ = new Array();
}
StringBuffer.prototype.append = function (str) {
this.__strings__.push(str);
return this; //方便链式操作
}
StringBuffer.prototype.toString = function () {
return this.__strings__.join("");
}

/*测试*/
var buffer = new StringBuffer();
buffer.append("Hello ").append("javascript");
var result = buffer.toString();
alert(result);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
会飞的身体
2016-09-06 · TA获得超过226个赞
知道小有建树答主
回答量:348
采纳率:66%
帮助的人:297万
展开全部
最简单的方式就是直接用+号链接,因为js是弱类型语言,不区分具体类型,直接字符串a+b+c就行,不放心的话中间可以加上"";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桂哥的点滴
2016-08-27 · 关注教育,产品,互联网,个人成长。
桂哥的点滴
采纳数:1042 获赞数:2173

向TA提问 私信TA
展开全部
百度的高质量提问就是一个脑残的设计,只能看到提问,不能看到问题详情,怎样获得高质量的回答????

另外,也看不到其它人的回答,如果其它人回答了,我再来回答一次,不是很浪费时间与精力?!

@百度知道 脑残设计!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式