<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE社區

    茍有恒,何必三更起五更眠;
    最無益,只怕一日曝十日寒.
    posts - 241, comments - 318, trackbacks - 0, articles - 16

    第5章 引用類型

    Posted on 2011-07-19 15:07 xcp 閱讀(332) 評論(0)  編輯  收藏 所屬分類: JavaScript高級程序設計(第2版)
    1.引用類型是一種數據結構,從技術上講是一門面向對象的語言,通常稱為類。從技術角度來說是一門面向對象的語言,但它不具備傳統面向對象語言所支持的類和接口等基本結構。
    2.創建Object實例的方式有兩種:
        a. 用new操作符后跟Object構造函數
            var person = new Object();
            person.name = "xcp";
            person.age = 23;
        b. 另一種方式是使用對象字面量表示法
            var person = {
                name:'xcp';
                age:23;
            }
            或者
            var  person={}
            person.namge="xcp";
            person.age=23;
     3.創建Array數組有兩種方法:
        a.  使用Array的構造函數
            var colors = new Array();
            var colors = new Array(20);
            var colors = {"red","blue","green"}
            //每一個數組元素的初始值都是undefined;
        b. 使用數組字面量方法
            var colors = Array(20);
            var colors = ["red","blue","green"];
    4.使用Array的常用方法:
        a. 棧操作方法(后進先出):push 推入,pop 彈出 
            var colors=["red","blue"];
            colors.push("green"); //推入一項
            colors[4]="block"; 
            alert(colors.length); //4  
            var temp = colors.pop();
            alert(temp);  //block
            alert(colors.length);//3

         b. 對列方法(先進先出):push推入,shift取出, unshift塞入
            var colors=["red","blue"];
            colors.push("green"); //推入一項
            colors[4]="block"; 
            alert(colors.length); //4  
            var temp = colors.shift();
            alert(temp);  //red
            alert(colors.length);//3
          
            unshift和shift的功能剛好相反:他是在第一位添加數據項
            
            var colors = new Array();
            var count = colors.unshift("red","green");
            alert(count); //2
            colors.unshift("block");
            var item = colors.pop();
            alert(item); //green
            alert(colors.length);

        c. 重排序方法:reverse()和sort()
            var values=[1,2,3,4,5,6];
            values.reverse();
            alert(values); //6,5,4,3,2,1
            
            //注意sort方法會調用每個數組的toString()轉型方法,然后得到字符串,然后再排序,就會出現以下情況:
            var values = [0,15,1,10,5];
            values.sort();
            alert(values); //0,1,10,15,5
            //不用說這種sort方法肯定不是最佳的方式。因此sort方法可以接收一個比較函數作為參數,和java的Comparable一樣的作用.
            function compare(value1,valu2){
                if(value1 < value2){
                    return -1;
                }else if(value > value2){
                     return 1;
                }else{
                      return 0;
                }
            }
            values.sort(compare);
            alert(values); //0,1,5,10,15
            
        d. 常用方法
            concat:兩個或更多數組組合而成的
            join:返回字符串值,其中包含了連接到一起的數組的所有元素    values.join(",")    0,1,5,10,15
            slice:返回一個數組的一段   values.slice(0,2);
            splice:從一個數組中移除一個或多個元素   values.splice(0,2);
            valueOf:返回指定對象的原始值

    5.使用Data類型
        a. 創建日期對象
            var now = new Date();
            var someData = new Date(Data.parse("May 25,2005"));            
            var someData = new Date("May 25,2005");
    6.使用RegExp對象
        a. 創建RegExp對象(字面量方式創建)
            var expression  = /pattern/flags;
            這里面的pattern 就是就行匹配的正則表達示
            這時面的flags包括以下幾種:g,i,m
                g:表示全局模式(global),則將模式應用于所有字符串,而并非發現第一個匹配項就立刻停止。
                i:表示不區分大小寫(case-insensitive),
                m:表示多行模式(mutiline),即達到一行末尾時還會繼續查找下一行是否存在匹配項
                例:var at = /at/g;    匹配at
                      var at2 = /[bc]at/gi;  匹配bat,cat。。。。并且不區分大小寫
                      var at3 = /.at/gi;   分有以at結尾的3個字母的字符串
                      注:
                          以下是javascript里面的轉義字符:(){}[]\|/^$.?*+  轉義方法:加\ 。如\\ \$
                      var at4 = /\.at/gi;  所有.at,不區分大小寫
        b. 使用RegExp構造函數創建
            它接受兩個參數:一個是要匹配的字符串模式,可選的標志字符串。
            var at5 = new RegExp("[bc]at","i");
            由于RegExp函數模式的參數是字符串,所以在某些情況下要對字符串進行雙重轉義,如:
            
        c. RegExp的屬性
            >global:返回true/false,返回是否設置了g標志
            >ignonecase:返回true/false,返回是否設置了i標志
            >mutiline:返回true/false,返回是否設置了m標志
            >lastIndex:開始搜索下一個匹配的位置,從0開始
            >source:返回正則表達示
        d. RegExp的方法
            >exec方法
            var text = "mom and dad and bady";
            var p = /mon( and dad( and bady)?)?/gi;
            var m = p.exec(text); //返回匹配器
            alert(m.index); //0
            alert(m.input);//mom and dad and bady
            alert(m[0]);//mom and dad and bady 相當于group(0)
            alert(m[1]);// and dad and bady 相當于group(1)
            alert(m[2]);// and bady 相當于group(2)
            
           >test方法
            通常用于if語句,如果匹配返回true,否則返回false
            var test="000-00-0000";
            var p = /\d{3}-\d{2}-\d{4}/;
            if(p.test(test)){alert("dd");}

        f. Function類型
            a.函數的聲明
                function test(index){}
                var test = function(index){}
                var test = new Function(index){} //不推薦
                注:
                    >函數沒有重載功能,如果兩個函數一樣,他會直接將前面的方法
            b. 函數內部屬性this和arguments
            c. 每個函數都包括length和prototype屬性
                length:接受參數的個數
                prototype:原型對象,很重要
            d. 每個函數都有兩個非繼承的方法:apply()和call()方法
                >這兩個方法的用途都是在特定的作用域中調用函數,實際上等于設置函數體內this對象的值。
                >首先,apply方法接受兩個參數:一個是在其中運行函數的作用域,另一個是參數數據(可以是Array實例,也可以是arguments對象)
                    function sum(num1,num2){
                        return num1+num2;
                    }
                    function callsum1(num1,num2){
                        return sum.apply(this,arguments); //傳入arguments對象
                    }
                    function callsum2(num1,num2){
                        return sum.apply(this,[num1,num2]); //傳入數組
                    }
                    alert(callSum1(10,10)); //20
                    alert(callSum2(10,10)); //20
                >call()方法與apply()方法的作用相同,它們的區別僅在于接收參數的方式不同。對于call()方法來言,第一個參數是作用域沒有變量 ,變化的只是其余參數都是直接 傳遞跟函數的。
                    function callSum3(num1,num2){
                        return sum.call(this,num1,num2);
                    }
                    alert(callSum3(10,10));//20

                    //所以apply()和call()使用就看怎么使用方便來用了,如我們傳入的參數就是要傳調用的函數的參數,就可以直接作用apply(this,arguments);

                >真正強大的地方是能夠擴充函數賴以運行的作用域<就是在后面運行的函數的作用域就是我傳進的作用域>
                    window.color = "red";
                    var o={color:"blue"}
                    function getColor(){
                        alert(this.color);
                    }
                
                    getColor();                //red
                    getColor.call(this);     //red
                    getColor.call(widow);  //red;
                    getColor.call(0);         //blue;

        g.Boolean類型
            a. 聲明
                var b = true;
                var b = new Boolean(true);
                alert(b instanceof Boolean); //true
        
        h.Number類型
            a. 聲明
                var b1 = 2;
                var b2 = new Number(2);
                var b3 = (Number)"2";
        
        i.String類型
            a. 聲明
                var s1 = "dd";
                var s2 = new String("dd');
            b. 常用方法
                charAt,concat, substring,indexOf,toLowerCase,toUpperCase等

        j.常用內置對象
            a. URI編碼方法:encodeURI()和encodeURIComponent(常用)
                比較:encodeURI()用于整個URL;encodeURIComponent用于URL中的某段進行編碼
                         encodeURI不會對本身的URL特殊字符進行編碼,例如冒號,正斜杠,問號和#號;而encodeURIComponent對所有非標準字符都要進行編碼
                        
            b. URL解碼方法:decodeURI()和decodeURIComponent,基本操作同上
            c.  isNan(), parseInt(), parseFloat()
            d. eval()---功能最強大的一個方法
                ECMAScript內部解析器一樣
            e. Window對象
            f.  Math類
                min,max, ceil,floor,round,random               



    名稱: ?4C.ESL | .↗Evon
    口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
    mail: 聯系我


    主站蜘蛛池模板: 亚色九九九全国免费视频| 成人精品国产亚洲欧洲| 全免费a级毛片免费看| 国产亚洲综合色就色| 免费看少妇高潮成人片| 亚洲综合无码无在线观看| 国产成人精品免费视| 亚洲av永久无码嘿嘿嘿| 国产成人无码免费看视频软件| 亚洲AV无码一区二区三区人| 国产桃色在线成免费视频| 色偷偷女男人的天堂亚洲网| 午夜成人免费视频| 边摸边脱吃奶边高潮视频免费| 亚洲乱码国产一区网址| A片在线免费观看| 亚洲日本乱码一区二区在线二产线| 亚洲黄色免费电影| 亚洲综合无码AV一区二区| 国产一区二区三区免费观在线| 久久久久无码精品亚洲日韩| 亚洲高清视频免费| 国产精品亚洲专区一区| 在线观看亚洲天天一三视| 99久在线国内在线播放免费观看| 亚洲人xxx日本人18| 亚洲 小说区 图片区 都市| 18禁超污无遮挡无码免费网站| 亚洲人成在线精品| 亚洲?v无码国产在丝袜线观看| 久草视频在线免费看| 国产精品亚洲一区二区麻豆| 亚洲Av无码国产情品久久| 亚洲av无一区二区三区| 美女视频黄的全免费视频网站| 在线亚洲精品视频| 亚洲国产精品第一区二区| 免费无码不卡视频在线观看| 你是我的城池营垒免费看| 亚洲日韩精品A∨片无码加勒比| 国产国拍亚洲精品福利 |