JavaScript 怎样高效拼接字符串?
10个回答
展开全部
就像在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("");
}
展开全部
(1)新版本的浏览器对拼接字符串做了优化,如果不是要兼容比较老的浏览器比如IE6,可以不做优化
(2)优化一般从两个地方着手
a.如果是for(var i=0;i<arr.length;i++),在这里面拼接,可以在循环外边用一个变量缓存一下arr.length,把i<arr.length改成i<缓存的那个变量,这样不用每次取length.
b.把要拼接的字符串都push到一个js数组里,再用数组的join方法,以空字符串join,这样就不会有过多的字符串创建和销毁,从而提高效率.
(2)优化一般从两个地方着手
a.如果是for(var i=0;i<arr.length;i++),在这里面拼接,可以在循环外边用一个变量缓存一下arr.length,把i<arr.length改成i<缓存的那个变量,这样不用每次取length.
b.把要拼接的字符串都push到一个js数组里,再用数组的join方法,以空字符串join,这样就不会有过多的字符串创建和销毁,从而提高效率.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
模拟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);
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的方式就是直接用+号链接,因为js是弱类型语言,不区分具体类型,直接字符串a+b+c就行,不放心的话中间可以加上"";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
百度的高质量提问就是一个脑残的设计,只能看到提问,不能看到问题详情,怎样获得高质量的回答????
另外,也看不到其它人的回答,如果其它人回答了,我再来回答一次,不是很浪费时间与精力?!
@百度知道 脑残设计!!!
另外,也看不到其它人的回答,如果其它人回答了,我再来回答一次,不是很浪费时间与精力?!
@百度知道 脑残设计!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询