我们知道java中String是引用类型,使用+=进行字符串拼接将会频繁地分配新地址,指向新的地址块,这无疑白白地消耗了系统的性能。javascript中的字符串类型同java的String类似,如果我们大量使用+=进行字符串拼接的话,将会使界面失去响应(卡死状态)。
无论是java还是.net 中都有提供StringBuffer()或StringBuilder() 的方法来实现大数据量拼接效率问题,那javascript呢?它是如何解决此问题的呢?其实javascript中可以使用数组来提高拼接的效率,通过数组的push()方法来添加数据,使用数组的join()方法来转成成字符串。
<script type="text/javascript">
var strArr = new Array();
strArr.push("aaaa");
strArr.push("bbbb");
strArr.push("ccccc");
alert(strArr.join(' '));
</script>
此种方法可以大大提高拼接的效率,但是它有个小小的问题,就是不能连续地push,例如这样的: strArr.push("aaa").push("bbb").push("ccc"); ,它就实现不了,不符合我们的编程习惯,所以我们自己封装了个StringBuffer的js类,让编程更easy!
/**
* @Description: 字符串拼接
* @CreateTime: 2014-1-18 下午2:42:35
* @author: chenzw
* @version V1.0
*/
function StringBulider() {
this.data = new Array();
}
/**
* 拼接字符串,可以连续拼接
* @return {}
*/
StringBulider.prototype.append = function(){
this.data.push(arguments[0]);
return this;
}
/**
* 转成字符串输出
* @return {}
*/
StringBulider.prototype.toString = function(){
if(arguments.length > 0){
return this.data.join(arguments[0]);
}
else{
return this.data.join('');
}
}
/**
* 判断字符串数组是否为空
* @return {}
*/
StringBulider.prototype.isEmpty = function(){
return this.data.length <=0;
}
/**
* 清空字符串数组
*/
StringBulider.prototype.clear = function(){
this.data = [];
this.data.length = 0;
}
/**
* 测试数据
*/
var sb = new StringBulider();
sb.append("a").append("b").append("c").append("d");
alert(sb.toString(',')); //结果: a,b,c,d