JavaScript基礎知識五
阿新 • • 發佈:2020-08-21
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;} );