? 數組對象的作用是:使用單獨的變量名來存儲一系列的值。
? 數組就是一堆數據的分組或者集合。
? 數組的對象是Array,也是非常常用的引用類型
? 例如:[1, 3,‘sss’,333]
1.創建數組
1.1 使用 new 操作符創建數組對象
var arr = new Array();
arr[0] = 19;//數組的索引從 0 開始
arr[1] = "www.hamkd.com";
arr[2] = "www.aicoder.com";
數組中可以存儲任何數據類型的數據(其他語言中數組的數據類型一旦確定只能存儲特定類型的數據)
通過[]和索引來訪問和設置數組的內容
數組的索引是從 0 開始!!!
JavaScript 中的數字的容量可以動態改變
數組的容量最大為:4294967295 個 (232-1)
求冪運算符:** (補充)
數組的構造函數可以傳遞數組的容量的參數
var arr = new Array();// 創建一個空數組
var arr = new Array(3);//定義數組的容量為 3 個
var arr = new Array("a","b","c");
//定義一個數字,有 a , b ,c 三個字符串
數組的長度可以通過 length 數組來獲取。
length 是可讀和可以進行設置,可以對數組進行截斷操作。
var arr = new Array(); // 創建一個空數組類型; []
// console.log(arr.toString());
arr[0] = 1; // length = 1
arr[1] = 2; // length = 2
arr[2] = 'sss'; // length = 3
console.log(arr); // [1, 2, 'sss']
console.log("length =" + arr.length);
// 構造函數創建數組傳遞參數
var arr2 = new Array(4); // 給構造函數傳遞數值類型,那么它認為是創建容量為數值的數組
arr2[0] = 'sssss';
arr2[1] = 0;
arr2[2] = 0;
arr2[3] = 0;
arr2[4] = 0;
console.log(arr2);
// 創建數組的時候,順便進行初始化數組的內容
var arr3 = new Array(1,2,3,'sssd', 'malun', true, [22,33]);
console.log(arr3);// length = 7
// 如果減小 length 值,就相當于截斷了數組。
arr3.length = 2;
console.log( arr3 ); // => [1,2]
1.2構造函數創建數組
? 數組的構造函數可以傳遞數組的容量的參數
? var arr = new Array();// 創建一個空數組
? var arr = new Array(3);//定義數組的容量為3個
? var arr = new Array("a","b","c");
? //定義一個數字,有a , b ,c 三個字符串
? 數組的長度可以通過length數組來獲取。
? length是可讀和可以進行設置,可以對數組進行截斷操作。不要這么用!!!!
1.3字面量創建數組
var arr = [];//創建一個空數組
var arr = [1,2,3];//創建三個數字的數字。
var arr=[1, ,2];//中間的省略的是 undefined
var arr = [1 ,”dd”,true, [1,3], { age: 19}, 33];
數組的元素的類型可以是任意類型。
var a1 = []; //創建空數組
// 創建一共復雜數組
var a2 = [1, 2, 'sss', true, {age:19}, null, undefined];
console.log(a2.toString());
console.log(a2);
var a3 = [2, ,3]; // => [2, undefined, 3]
console.log(a3);
// 這種方式最多,推薦這么使用。
console.log(a3[0]); // 數組的索引是從 0 開始。所有開發語言數組都是從 0 開始。
2.遍歷數組
length 屬性
length 屬性,如果是連續數組,那么 length 就是數組元素的個數如果是稀疏數組,那么 length 不能
代表元素的個數
for 循環方式遍歷數組
// 如果是連續的數組,可以中使用 lenth 代表數組中的元素個數。
var a = [1,2,3,89, "slj", true]; // length = 6;
console.log('length = ' + a.length);
// 輸出數組中的所有元素。
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}
for in 循環的方式
// 如果是連續的數組,可以中使用 lenth 代表數組中的元素個數。
var a = [1,2,3,89, "slj", true]; // length = 6;
// 另外我們還可以使用 for in 的方式遍歷數據。 也可以把繼承自原型的屬性也進行遍歷。
// for in 遍歷對象,拿到的是對象的屬性名,而不是屬性值。
for(var k in a) { // for in 遍歷數組,k 值是數組的索引編號,不是數組的元素值。
// k 0 ,1 ,2
console.log(a[k]); // k 是索引編號不是數組元素值
}
數組的索引是從 0 開始!!!不是從 1 開始
注意:從原型上繼承來的屬性也會被 for in 遍歷,所以如果需要去掉這部分屬性可以通過
hasOwnProperty()進行過濾。
hasOwnProperty()只有當是對象自己屬性才返回 true,如果是繼承的返回 false。
數組遍歷.png
2.1數組遍歷案例
案例:一個數組,合法值為 1,2 或 3,其余為不合法,統計合法及不合法的個數。
// 案例:一個數組,合法值為 1,2 或 3,其余為不合法,統計合法及不合法的個數。
var t = [1, 4, 9, 'sss', 3, '2', 2, 3, 2, 1];
var rigthfulNum = 0, // 合法的個數
illNum = 0; // 非法的個數
//第一種: 遍歷數組中的每個元素,判斷是否是合法,如果合法給rigthfulNum += 1
// for(var i = 0; i < t.length; i++) {
// if(t[i] === 1 || t[i] === 2 || t[i] === 3) {
// rigthfulNum += 1;
// } else { // else 可以不用寫。
// illNum += 1;
// }
// }
// console.log('合法:' + rigthfulNum);
// console.log('非法:' + illNum);
// // 第二種寫法: 只求 rightfulNum, illNum 通過 length -rightfulNum
// for(var i = 0; i < t.length; i++) {
// if(t[i] === 1 || t[i] === 2 || t[i] === 3) {
// rigthfulNum += 1;
// }
// }
// illNum = t.length - rigthfulNum; // 通過數組的總長度-合法的剩下的就非法的。
// console.log('合法:' + rigthfulNum);
// console.log('非法:' + illNum);
// 第三種:for in
// for(var k in t) {
// // console
// switch(t[k]) {
// case 1:
// rigthfulNum += 1;
// break;
// case 2:
// rigthfulNum += 1;
// break;
// case 3:
// rigthfulNum += 1;
// break;
// default:
// illNum +=1 ;
// }
// }
// console.log('合法:' + rigthfulNum);
// console.log('非法:' + illNum);
// switch 優化版本
for(var k in t) {
// console
switch(t[k]) {
case 1:
case 2:
case 3:
rigthfulNum += 1;
break;
default:
illNum +=1 ;
}
}
console.log('合法:' + rigthfulNum);
console.log('非法:' + illNum);
2.3稀疏數組
數組中的數據的索引不一定都是連續的。非連續的數組就是稀疏數組。
比如:
var t = [1, 3];
t[100]= true;
// => t.length = 101;
// => t = [1, 3, undefinded*98, true]
// 實際上有數據的只有 1,3,true 中間有 98 個 undefined可以使用 for in 循環越過
undefined 的數據。
也就是數組的元素的個數不一定跟 length 相等
注意:稀疏數組盡量少用!!!!!或者就是不用!!!!
var t = [1, 2];
// 0 , 1
t[100] = 'sslj'; // 索引到了 100, length = 101
console.log(t);
console.log(t[10]); //undefined
// for in 循環會越過稀疏數組種的 undefied 空值。
for(var k in t) {
console.log(t[k]);
}
結論:
// 1、 length 和數組的元素的個數不一定相等
// 2、 數組不一定是連續的
// 3、 使用 for in 循環可以對稀疏數組的空值 undefined 進行過濾。
// 4、 不要稀疏數組!!!!!