好好学一遍JavaScript 笔记(三)——StringBuffer、prototype

来源:未知 责任编辑:责任编辑 发表时间:2015-10-08 14:16 点击:

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> 所用时间"); 
         
         

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 2011年度最佳 jQuery 插件
  • jquery学习笔记---jqGrid学习笔记 完整整理
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 用js检测两个线段是否相交
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1