浏览 4403 次
锁定老帖子 主题:一个js写的StringBuffer类
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-02
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; };
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-15
这个函数好!
|
|
返回顶楼 | |
发表时间:2008-11-15
这里也有一个
|
|
返回顶楼 | |
发表时间:2008-11-16
多此一举,直接用 数组 不就完了。
|
|
返回顶楼 | |
发表时间:2008-11-16
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。
|
|
返回顶楼 | |
发表时间:2008-11-17
hax 写道 stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。
请问hax在那里得到的“其他浏览器上stringbuffer并不能提高性能”的结论??? |
|
返回顶楼 | |
发表时间:2008-11-19
我做过测试。在字符串长度小于一定值(忘记多大了,不过至少是64k)的情况下,StringBuffer的性能是不如 + 的。因为 + 是JS操作符,得到最大优化的。
参见本篇:http://hax.iteye.com/blog/126859 至于IE,问题也不在 + 本身上。 引用 比如我们常见的字符串拼接问题,经过我的测试验证,单纯的多次创建字符串对象其实根本不是性能差的原因。要命的是在对象创建期间的无谓的垃圾回收的开销。而Array.join的方式,不会创建中间字符串对象,因此就减少了那该死的垃圾回收的开销。 IE上的测试方法很简单,就是你创建无数字符串,但是用 , 操作符连接,这样就不会触发垃圾回收,测试下来串接字符串本身并无性能问题。 |
|
返回顶楼 | |
发表时间:2008-11-20
最后修改:2008-11-20
先不管 这个js有没有实际用处
用js 实现一个 stringbuffer 似乎是学习js的过程中必不可少的一个环节啊 我接触过很多搞js的人 他们都经历过 "用js 实现一个 stringbuffer"的考验 (很多笔试也喜欢考这题 呵呵) 要做到很完备 还是不简单的 lz这个 我只能给打70分左右, 只是实现了基本功能 很多东西考虑的不周全. |
|
返回顶楼 | |