JavaScript 數組: 1、它是值的有序集合 2、是無類型的,接受任意類型,且同個數組可以擁有多種類型 3、索引是基於 0 的 32 位數值,最大可能索引為 2^32-2 4、是動態的,在改變數組大小時不需重新分配空間 5、可以是稀疏的,即索引不一定要連續,元素與元素之間允許有空缺 6、有一個 ...
JavaScript 數組:
1、它是值的有序集合
2、是無類型的,接受任意類型,且同個數組可以擁有多種類型
3、索引是基於 0 的 32 位數值,最大可能索引為 2^32-2
4、是動態的,在改變數組大小時不需重新分配空間
5、可以是稀疏的,即索引不一定要連續,元素與元素之間允許有空缺
6、有一個 length 屬性,返回數組長度
7、是 JavaScript 對象的特殊形式
8、繼承自 Array.prototype 中的屬性,定義了一套豐富的數組操作
創建數組:
// 可以通過數組直接量或構造函數 Array 來創建數組 let arr = [1, , 3]; console.log(arr.length); // 輸出3 arr = [, ,]; console.log(arr.length); // 數組直接量語法允許有可選結尾逗號,所以輸出2 /* arr = new Array(); //創建空數組,等價[] arr = new Array(5); // 創建長度為5的數組,此時值與索引都未定義 // 當參數個數大於 1 時,參數指定數組的內容 arr = new Array(3, 4, {'x': 'y'}, [5, 6], "Hello"); */
數組的讀寫:
1、使用 [ ] 操作符來訪問數組中的一個元素,方括弧里是一個返回非負整數值的任意表達式
2、所有索引都是屬性名,而只有 0~2^32-2 之間的整數屬性名才是索引
3、可以使用負數或非整數來索引數組,但數值會轉換為字元串,作為屬性名來使用
4、若使用非負整數字元串,則將它轉換為整數,並作為數組索引
5、數組索引僅僅是對象屬性名的一種特殊類型,即 JavaScript 數組沒有 “越界” 錯誤的概念,當屬性不存在時僅僅得到 undefined 值
let arr = [1, 2, 3, 4, 5]; console.log(arr[0]); // 返回 arr[0] console.log(arr[arr[0]+1]); // 返回 arr[2] console.log(arr["2"]); // 返回 arr[2] arr["-1.2"] = 7; console.log("arr['1.2']: ", arr[-1.2]); // 返回 7 console.log(arr[1.23]); //返回 undefined
稀疏數組:
1、稀疏數組就是包含從 0 開始的不連續索引的數組
2、稀疏數組的 length 屬性值大於元素個數
3、可以通過數組直接量、構造函數 Array() 和 delete 操作符來創建稀疏數組
let a1 = []; a1[100] = 0; // 創建一個長度為 101 的稀疏數組 let a2 = new Array(3); a2[2] = 3; // 創建一個長度為 3 的稀疏數組,等價 a2 = [, , 3] let a3 = [1, 2, 3, 4]; delete a3[1]; // 使數組變成長度為 4 的稀疏數組
註:減小數組 length 屬性時會截去大於 length 部分的元素,我們可以設置 Object.defineProperty(arr, "length", {writable: false}) 使數組 length 屬性變成只讀,即無法修改數組大小
多維數組:
1、JavaScript 不支持真正的多維數組,但可以用數組的數組來近似地表示
2、可多次使用 [ ] 操作符來訪問多維數組的元素
let arr = [[[1, 2] ,[3, 4]], [5, 6]]; console.log(arr[0][0][0] + arr[0][1][1] + arr[1][1]); // 返回 1+4+6