当前位置:编程学习 > JAVA >>

好好学一遍JavaScript 笔记(三)

javaScript中的String的、拼接:
与其他语言类似、ECMAScript的字符串是不可变的、即它们的值不能改变。考虑下面的代码:

var str = "hello"; 
str += "world"; 
实际上,这段代码在幕后执行的步骤如下:
1、创建存储"hello"的字符串。
2、创建存储"world"的字符串。
3、创建存储连接结果的字符串。
4、把str的当前内容复制到结果中。
5、把"world"复制到结果中。
6、更新str、使它指向结果。
如果重复这一过程次数较多、就会造成性能问题。

解决方法是用Array对象存储字符串、然后用join()方法(参数是空字符串)创建最后的字符串:

var arr = new Array; 
arr[0] = "hello"; 
arr[1] = "world"; 
var str = arr.join(""); 
此时、执行步骤如下:
1、创建存储结果的字符串。
2、把每个字符串复制到结果中的合适位置。

更好的解决办法可以使用StringBuffer类打包该功能:

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> 所用时间"); 
         
         
        var oBuffer = new StringBuffer(); 
        d1 = new Date(); 
        for(var i =0 ; i < 10000; i++){ 
            oBuffer.append("性能测试");     
        } 
        var sREsult = oBuffer.toString();   
            
        d2 = new Date(); 
        document.write("<br/>StringBuffer连接:<font color='red;'>"+(d2.getTime()-d1.getTime())+"</font> 所用时间"); 

IE6测试结果: www.zzzyk.com


 加号连接:2094 所用时间    
 StringBuffer连接:47 所用时间
 结果显而易见、但是如果数据量不是非常大、完全没有必要这样做
 但是用IE8跟360、谷歌这些浏览器测试结果又完全不同
 应该是javaScript对传统的""+""方法进行了优化、
 毕竟这个示例是很老很老的了出自————《javascript高级程序设计》 
 谷歌浏览器测试:
 加号连接:0 所用时间
 StringBuffer连接:2 所用时间
 百度了很久、木有什么好的结果
 看来以后写连接优化还要注意浏览器呀
 不过现在估计用IE6的很少很少了吧!!! 也希望了解情况的大侠看到给解释解释!!!感激不尽!!!

/**
         * 查询数组中是否存在某个元素
         * @param {Object} sValue 元素值 
         * @memberOf {TypeName} 
         * @return {Int} 返回-1则说明不存在、否则返回该元素在数组中的索引值 
         */ 
        Array.prototype.indexOfHzw = function (sValue){ 
            for(var i=0; i < this.length; i++){ 
                if(sValue == this[i]){ 
                    return i ; 
                } 
            } 
            return -1; 
        }     
        var array = new Array("red","blue","yellow","易做图"); 
        alert(array.indexOfHzw("易做图")); 


<script type="text/javascript"> 
     
        /**
         * 创建新方法
         */ 
        Object.prototype.showValue = function(){ 
            alert(this.valueOf());        
        };    
        var str = "hello"; 
        var iNum = 26;    
        str.showValue();  
        iNum.showValue();  
         
         
        /**
         * 从定义已有方法
         */ 
        Function.prototype.toString = function (){ 
            return "从定义方法"; 
        }; 
        function fTry(){ 
    &nbs

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,