`
hyj_dx
  • 浏览: 99644 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个js写的StringBuffer类

阅读更多
function StringBuffer() {
	this._objArray = [];
	this._undoFlag = false;
};

StringBuffer.prototype.toString = function() {
	if(this._objArray.length==0) {
		return '';
	}
	var str = this._objArray.join('');
	if(this._objArray.length > 1) {
		this.clear();
		this.append(str);
	}
	this._undoFlag = false;
	return str;
};

StringBuffer.prototype.append = function(object) {
	this._objArray[this._objArray.length] = object;
	this._undoFlag = true;
	return this;
};

StringBuffer.prototype.clear = function() {
	this._objArray.length = 0;
	this._undoFlag = false;
};

StringBuffer.prototype.undoLastAppend = function() {
	if(this._undoFlag) {
		this._objArray.length = this._objArray.length -1;
		this._undoFlag = false;
	}
};

StringBuffer.prototype.setSize = function(size) {
	if(size==null || size<=0) {
		this.clear();
		return;
	}
	var str = this._objArray.join('');
	if(size < str.length) {
		str = str.substring(0, size);
		this.clear();
		this.append(str);
	} else if(this._objArray.length > 1) {
		this.clear();
		this.append(str);
	}
	this._undoFlag = false;
};

StringBuffer.prototype.getSize = function() {
	var str = this.toString();
	return str.length;
};

 

分享到:
评论
7 楼 fins 2008-11-20  
先不管 这个js有没有实际用处

用js 实现一个 stringbuffer 似乎是学习js的过程中必不可少的一个环节啊

我接触过很多搞js的人 他们都经历过 "用js 实现一个 stringbuffer"的考验
(很多笔试也喜欢考这题 呵呵)
要做到很完备 还是不简单的
lz这个 我只能给打70分左右, 只是实现了基本功能 很多东西考虑的不周全.

6 楼 hax 2008-11-19  
我做过测试。在字符串长度小于一定值(忘记多大了,不过至少是64k)的情况下,StringBuffer的性能是不如 + 的。因为 + 是JS操作符,得到最大优化的。

参见本篇:http://hax.iteye.com/blog/126859

至于IE,问题也不在 + 本身上。
引用
比如我们常见的字符串拼接问题,经过我的测试验证,单纯的多次创建字符串对象其实根本不是性能差的原因。要命的是在对象创建期间的无谓的垃圾回收的开销。而Array.join的方式,不会创建中间字符串对象,因此就减少了那该死的垃圾回收的开销。


IE上的测试方法很简单,就是你创建无数字符串,但是用 , 操作符连接,这样就不会触发垃圾回收,测试下来串接字符串本身并无性能问题。
5 楼 天下有鹏 2008-11-17  
hax 写道
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。

请问hax在那里得到的“其他浏览器上stringbuffer并不能提高性能”的结论???
4 楼 hax 2008-11-16  
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。
3 楼 myy 2008-11-16  
多此一举,直接用 数组 不就完了。
2 楼 leeight 2008-11-15  
<p>这里也有一个<br/>http://doctype.googlecode.com/svn/trunk/goog/util/stringbuffer.js</p>
<p> </p>
1 楼 逆风的香1314 2008-11-15  
这个函数好!

相关推荐

    浅谈js中StringBuffer类的实现方法及使用

    &lt;strong&gt;JAVA中有一个StringBuffer类,js中却没有下面来自己实现一个简单的js的StringBuffer类。 //创建一个StringBuffer类 ,此类有两个方法:一个是append方法一个是toString方法 function StringBuffer() { ...

    java高级特性StringBuffer类.doc

    java高级特性StringBuffer类.doc

    JAVA的StringBuffer类.docx

    JAVA的StringBuffer类.docx

    JavaScript 利用StringBuffer类提升+=拼接字符串效率

    JavaScript 利用StringBuffer类提升+=拼接字符串效率,需要的朋友可以参考下。

    JavaScript中String和StringBuffer的速度之争

    显示情况时Javascript中并没有StringBuffer类,一种主流的Javascript StringBuffer类的实现是通过prototype构造一个StringBuffer类。 StringBuffer.js 代码如下: function StringBuffer(){ this.content = new Array...

    javascript下高性能字符串连接StringBuffer类

    使用StringBuffer类比使用加号节省50%左右的时间,大家对于大数据的连接最好使用这个方法。

    javascript之大字符串的连接的StringBuffer 类

    因此,可以由此原理写一个简单的 StringBuffer 类,在遇到大字符串连接时可以派上用场。 //by misshjn function StringBuffer(){ this.data = []; } StringBuffer.prototype.append = function(){ this....

    JavaScript实现Java中StringBuffer的方法

    主要介绍了JavaScript实现Java中StringBuffer的方法,实例分析了StringBuffer类的实现与使用技巧,需要的朋友可以参考下

    js实现StringBuffer的简单实例

    下面小编就为大家带来一篇js实现StringBuffer的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    javascript制作sql转换为stringBuffer的小工具

    sql转换为stringBuffer的小工具,dao层拼接sql很麻烦,用这个小工具可以快速拼接,把写好的sql在sql工具中格式化好,然后复制进去就可以了 演示地址:http://runjs.cn/detail/fj14tpyu 有点丑,建议全屏查看,不过你...

    Javascript写的asp功能包

    3、ajax功能,客户端与服务器端均由javascript编写,将客户端参数和函数名经XML编码后传至服务端,服务器执行后将结果传回客户端,从而实现了ajax。 4、常用组件,如Hashtable和StringBuffer,能够提高asp应用的性能...

    jsvm2框架源码

    JSVM (JavaScript Virtual Machine的缩写),一个JavaScript基础框架,sourceforge开源项目,由万常华(wch3116)于2003年底发起, 采用的是 BSD License 授权协议。 JSVM并不是一个JavaScript Library,而是一个更...

    sb-js:sb-js npm 库的主页

    sb-js目的一个实现简单 StringBuffer 的 Node.js 库,很像 Java 类。 在内部有效地使用数组,而不是不断附加字符串。例子设置将 sb-js 添加到您的项目或 package.json 文件中: npm install sb-js在您的代码中需要 ...

Global site tag (gtag.js) - Google Analytics