進擊的JavaScript小白(三)——陣列
js裡面萬物皆物件。
看,我有很多物件呢。
雙十一不購物怎麼了?我是有物件的人,我不過光棍節!
一、基本資料型別和複雜資料型別的區別
1、儲存的資料個數不同
2、在記憶體中儲存的方式不同
1、基本資料型別在記憶體單元中儲存的是具體值
2、複雜資料型別在記憶體單元中儲存的是具體值的指標
3、複製操作後的結果不同
1、複製資料型別操作實際上是複製記憶體單元中儲存的那個東西
2、基本資料型別複製前後,兩個值沒有關聯
3、複雜資料型別複製前後,兩個值實際上是同一個值
二、陣列
1、陣列的作用
用於儲存多個數據
2、陣列的宣告方式
var arr = new Array(100, 98, 89, 78); var arr = [100, 98, 89, 78]; // 這種方式是推薦方式,因為書寫簡便。
3、陣列的長度屬性
arr.length : 用於獲取陣列中的資料總個數,是數值型別
4、陣列的操作
1、元素:陣列中的資料統稱為陣列的元素
2、索引
① 陣列中的每個元素按照索引值排列,索引從零開始,依次遞增
② 由於陣列中的元素按照索引排列,陣列也被稱為是一種有序的資料儲存方式
③ 利用索引操作元素 :arr[0]
④ 陣列最後一個元素的索引值 : arr.length - 1
3、陣列的長度操作
① 將陣列的length設定為大於實際元素的個數的值,這個值沒有意義,平常不會用
② 訪問陣列中不存在的元素,預設值為undefined
③ 將陣列的length設定為1小於實際元素個數的值可以將陣列末尾的一些值刪除
4、陣列的遍歷操作 : 使用迴圈獲取陣列中的所有元素
var arr = ['a', 'b', 'c', 'b', 'c', 'b', 'c'];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
反向遍歷
for (var i = arr.length - 1; i >= 0; i--) {
console.log(arr[i]);
}
5、陣列中可以有多種型別的資料,不過推薦一個數組中只儲存一種型別的資料。
三、氣泡排序
1、計數法
var arr = [1, 2, 3, 5, 4]; for (var i = 0; i < arr.length - 1; i++) { // 每輪程式碼執行時需要考慮,如果本輪比較中沒有發生交換操作,說明排序完畢了(上一輪) var count = 0; // 用於記錄本輪比較中發生交換的次數 for (var j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; // 發生交換,設定計數增加 count++; } } // 當本輪中所有次的比較均執行完畢,檢測count的值,如果為0,結束迴圈 if (count === 0) { break; } }
2、變數控制
var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
// 我們前面發現,本輪中是否進行過交換時決定是否可以跳出的關鍵點
var flag = true; // 表示假設本輪排序完畢可以結束
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
// 如果進入了if,阻止跳出操作
flag = false;
}
}
// 驗證flag的值
if (flag === true) {
break;
}
}
四、陣列去重
var arr = [1, 2, 1, 1, 2, 3, 3];
var result = [];
// 1 遍歷arr,獲取所有元素
for (var i = 0; i < arr.length; i++) {
// 規則:需要使用arr[i]與result中每個元素比較,如果沒有一個是相同的,就放入
var count = 0; // 用於保存於arr[i]相同的元素的個數
// 2 遍歷result,獲取所有元素
for (var j = 0; j < result.length; j++) {
if (arr[i] === result[j]) {
// 如果找到相同的值,設定count++
count++;
}
}
// 如果count為0,說明result中不存在當前值,放入
if (count === 0) {
result[result.length] = arr[i];
}
}
五、陣列型別檢測方法
第一個部落格我大致寫了一下資料型別的檢測方法,現在我寫一下陣列型別的檢測方法和檢測結果。
① typeof : 用於檢測大部分基本資料型別,typeof arr 的結果為object
② instanceof 操作符 : arr instanceof Array 的結果為true
③ constructor屬性 : arr.constructor === Array 的結果為true
④ Object.prototype.toString.call(資料):能夠得到資料的型別名稱
Object.prototype.toString.call(arr) 控制檯列印的結果為 ‘[object Array]’