1. 程式人生 > 實用技巧 >JavaScript基礎知識五

JavaScript基礎知識五

1、陣列
  1、陣列是引用型別的物件
        1、原始型別(基本型別/值型別) :將資料儲存在記憶體的棧(stack)中的
        2、引用型別:將真正的資料儲存在記憶體的堆(heap)中,在棧中會對堆中的地址進行 引用
        3、undefined 與 null
            1、undefined :宣告變數未賦值
            2、null :空,即讓當前物件不再指向任何的空間,主動釋放空間.在程式中,如果不再使用某物件的話,儘可能將其設定為 null
        4、面試題
            1、有如下程式碼 分析結果
                <script>
                    function changeArray(arr){
                        arr[0] = "魯班七號";
                        arr[1] = "程咬金";
                    }

                    var array = ["大喬","小喬"];
                    changeArray(array);
                    console.log(array); //結果:魯班七號,程咬金
                </script>

如圖所示:


                    
            2、有如下程式碼 分析結果
                <script>
                    function changeArray(arr){
                        arr = new Array("魯班七號","程咬金");
                    }
                    var array = ["大喬","小喬"];
                    changeArray(array);
                    console.log(array); //結果:大喬,小喬
                </script>
            原因:按引用傳遞
                引用型別的資料在做引數傳遞時,實際上傳遞的是地址(副本),而不是真正的值

如圖所示:




    2、關聯陣列
        php中:$array=["name"=>"西門慶"];
        以數字作為下標的陣列,稱為"索引陣列"
        以字串作為下標的陣列,稱為"關聯陣列"
        在JS中的關聯陣列:
            var array = [];
            array["字串下標"]=值;
            ex:
                var array = [];
                array["西遊記"] = "古代神話故事";
                array["紅樓夢"] = "古代愛情故事";
                array["水滸傳"] = ["西門慶","潘金蓮","武大郎"];

                console.log(array.length); 結果:0
            注意:
                1、關聯陣列中,字串下標的內容是不記錄到length中的
                2、關聯陣列中,只能使用字串作為下標取值,索引下標不能用
    3、for ... in
        遍歷出任意陣列中的字串下標和索引下標
        語法:
            for(var 變數 in 陣列){
                變數:字串下標 或 索引下標
                注意:變數的資料型別為 string
            }
    4、排序 - 氣泡排序
        1、什麼是氣泡排序
            將一組數字,按照從小到大的方式排列
            原理:
                兩兩比較,小的靠前
            特點:
                var arr = [23,9,78,6,45];
                1、n個數字,比較了n-1輪(外層迴圈)
                    for(var i=1;i<arr.length;i++){}
                2、每輪中的比較次數(內層迴圈)
                    隨著輪數的增加,比較次數在減少
                    第一輪:比較的次數,比輪數少1次
                    第二輪:比較的次數,比輪數少2次
                    for(var j=0;j<arr.length-i;j++){}
                3、每次比較時,如果第一個數字大於第二個數字,則交換位置
                    if(arr[j] > arr[j+1]){
                        交換 arr[j] 和 arr[j+1] 的位置
                    }

2、陣列中的常用方法
     1、toString()
        作用:將一個數組轉換為字串,並返回轉換後的結果
        語法: var str = 陣列物件.toString();

    2、join()
        作用:將陣列的元素通過指定的字串連線到一起,並返回連線後的字串
        語法:var str = 陣列物件.join("字串");

    3、concat()
        作用:拼接兩個或更多的陣列,並返回拼接後的結果
        語法:
            var result = 陣列物件.concat(陣列1,陣列2,... ...);
        注意:
            1、concat不會改變現有陣列,而是返回拼接後的結果
            2、要拼接的資料不一定是陣列,也可以是其它型別的資料

    4、slice()
        作用:擷取子陣列,從指定的陣列中,擷取幾個連續的元素組成一個新陣列
        語法:
            var arr = 陣列名.slice(start,end);
            start:從哪個下標位置處開始擷取,取值為正,從前向後算,取值為負,從後向前算
                       0      1        2       3
            var arr=["中國","美國","俄羅斯","加拿大"];
                       -4     -3       -2      -1
            end : 指定結束位置處的下標(不包含),該引數可以省略,省略的話相當於是從 start 一直擷取到 結束;
        注意:
            1、該函式不會影響現有陣列,會返回新的子陣列

    5、splice()
        作用:允許從指定陣列中,刪除一部分元素,同時再新增另一部分元素
        語法:arr.splice(start,count,e1,e2,... ...);
            start : 要新增或刪除元素的起始下標位置
            count : 指定要刪除的元素個數,取值為0表示不刪除
            e1,e2,... : 要增加的元素們(可選的)
            
            返回值:返回一個由刪除的元素所組成的陣列
        注意:該函式會改變現有陣列的結構

    6、reverse()
        作用:將陣列進行反轉
        語法:陣列名.reverse();
        注意:該函式會改變當前陣列的內容
    7、sort()
        作用:排序,預設情況下,按照陣列的元素們的Unicode碼進行升序排序。(預設按照字串的方式去排列的)
        語法:陣列名.sort();
        注意:該函式會改變當前陣列的內容

        特殊:允許自定義排序規則(排序函式),從而實現對數字的升降序排序
            語法:陣列名.sort(排序函式);
        ex:
            1、將數字升序排序
                var arr = [78,165,92,8,34,13];
                //定義升序的排序函式
                function sortAsc(a,b){
                    return a-b;
                }
                //為arr排序指定排序函式
                arr.sort(sortAsc);
                原理:
                    1、指定排序函式-sortAsc,定義兩個引數a,b,表示的是陣列中相鄰的兩個數字
                    2、將排序函式指定給陣列的sort()函式。陣列會自動傳遞資料到sortAsc()中,如果sortAsc函式的返回值>0的話,則交換兩個數字的位置,否則不變
        
        使用匿名函式指定排序函式:
            匿名函式:是一個沒有名稱的函式,只針對某一功能而存在
            arr.sort(排序函式);

            匿名函式:
            arr.sort( function(a,b){return a-b;} );