好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
javaScript中的String的、拼接:
与其他语言类似、ECMAScript的字符串是不可变的、即它们的值不能改变。考虑下面的代码:
[javascript]
var str = "hello";
str += "world";
实际上,这段代码在幕后执行的步骤如下:
1、创建存储"hello"的字符串。
2、创建存储"world"的字符串。
3、创建存储连接结果的字符串。
4、把str的当前内容复制到结果中。
5、把"world"复制到结果中。
6、更新str、使它指向结果。
如果重复这一过程次数较多、就会造成性能问题。
解决方法是用Array对象存储字符串、然后用join()方法(参数是空字符串)创建最后的字符串:
[javascript]
var arr = new Array;
arr[0] = "hello";
arr[1] = "world";
var str = arr.join("");
此时、执行步骤如下:
1、创建存储结果的字符串。
2、把每个字符串复制到结果中的合适位置。
更好的解决办法可以使用StringBuffer类打包该功能:
[javascript]
function StringBuffer(){
this._string_ = new Array;
}
StringBuffer.prototype.append = function(str){
this._string_.push(str);
};
StringBuffer.prototype.toString = function(){
return this._string_.join("");
};
/**由于javaScript没有公私(有)属性的区别、这样声明string只是为了标识它本意是私有属性。
测试一下StringBuffer对象和传统的字符串连接方法的性能:
*/
var d1 = new Date();
var str = "";
for(var i =0 ; i < 10000; i++){
str +="性能测试";
}
var d2 = new Date();
document.write("加号连接:<font color='red;'>"+(d2.getTime()-d1.getTime())+"</font> 所用时间");
相关新闻>>
- 发表评论
-
- 最新评论 更多>>