我們知道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