數組字面量聲明javascript
var arr = [1, 2, 3, 4];
複製代碼
構造函數聲明java
var arr = new Array(1, 2, 3);
複製代碼
類型轉換聲明數組
var arr = Array(1, 2, 3);
複製代碼
全部數組都繼承於 Array.prototypemarkdown
若是隻給構造函數一個參數 num,則是聲明一個長度爲 num 的數組,內容都爲 empty,即 undefineddom
稀鬆數組函數
var arr = [, 2, , 4,];
console.log(arr);
// empty, 2, empty, 4
複製代碼
數組字面量能夠定義稀鬆數組,打印數組未給值處打印出 empty,其實是 undefined,須要注意最後一個 「,」 不算ui
數組基於對象的鍵值對this
var arr = [1, 2, 3, 4, 5];
var obj = {
0: 1,
1: 2,
2: 3,
3: 4
};
複製代碼
Array 重寫了 Object 的 toString 方法spa
數組的讀寫prototype
使用下標(索引),讀對應位置的數據,沒有則返回 undefined
var arr = [, 2, , 4,];
arr[0] = 1;
複製代碼
push、unshift 方法繼承自 Array.prototype
push 在數組最後一位後添加一位,unshift 在第一位前添加一位
參數爲要添加的內容,能夠是多個
返回數組添加後的長度
var arr = [1, 2, 3];
arr.push(4, 5);
arr.unshift(0);
console.log(arr);
// [0, 1, 2, 3, 4, 5]
複製代碼
pop、shift 方法繼承自 Array.prototype
pop 刪除數組最後,shift 刪除第一位
返回被刪除的數值
var arr = [1, 2, 3];
console.log(arr.pop());
console.log(arr);
console.log(arr.shift());
console.log(arr);
// 3
// 1, 2
// 1
// 2
複製代碼
reverse 方法繼承自 Array.prototype
顛倒原數組內容並返回顛倒後的數組
var arr = [1, 2, 3];console.log(arr.reverse());// [3, 2, 1]
複製代碼
splice 方法繼承自 Array.prototype
剪切數組中內容,能夠剪切位置添加數據,會影響原數組
參數:開始的下標,剪切的長度,在開始下標位置添加的數據
返回剪切下的子數組
var arr = [1, 2, 3];console.log(arr.splice(1));console.log(arr);// [2, 3]// [1]
複製代碼
只給第一個參數,剪切從開始下標到最後的全部數據
若是是負數,則從 -1 開始由後往前數
var arr = [1, 2, 3];console.log(arr.splice(1, 1));console.log(arr);// [2]// [1, 3]
複製代碼
給兩個參數,表明開始下標和剪切長度
var arr = [1, 2, 3];console.log(arr.splice(1, 1, 100, 101));console.log(arr);// [2]// [1, 100 ,101, 3]
複製代碼
給三個參數,剪切後在開始下標位置後添加數據
和 splice() 功能類似,複製數組中內容並返回,可是不會影響到原數組
參數:開始下標,結束下標,不包括結束下標,左閉右開
var arr = [1, 2, 3];console.log(arr.slice(0, 2));console.log(arr);// [1, 2]// [1, 2, 3]
複製代碼
sort 方法用於數組排序,繼承自 Array.prototype
默認按照 ASCII 碼進行排序
改變原數組內容並返回排序之後的數組
```javascriptvar arr = [1, 4, 2, 3, 30];console.log(arr.sort());// [1, 2, 3, 30, 4]```
複製代碼
sort 方法給一個函數 function(a, b){},若是返回正數,則將 a 排在 b 後,不然 a 排在 b 前
var arr = [1, 3, 14, 27, 5, 4];console.log(arr.sort(function(a, b) { return a - b;}));// [1, 3, 4, 5, 14, 27]
複製代碼
利用 Math.random() 返回 (0, 1) 之間的隨機數結合 sort 方法實現數組隨機排序 由於 Math.random() - 0.5 返回一個 (-0.5, 0.5) 之間的隨機數
var arr = [1, 2, 3, 4, 5, 6];console.log(arr.sort(function(a, b) { return Math.random() - 0.5;}));
複製代碼
用於鏈接兩個數組,返回拼接後的數組,參數爲要在後面拼接的數組
var arr1 = [1, 2, 3];var arr2 = [4, 5, 6];console.log(arr1.concat(arr2));// [1, 2, 3, 4, 5, 6]
複製代碼
將數組轉換成字符串,返回該字符串,用逗號分隔
var arr = [1, 2, 3];console.log(arr.toString());
複製代碼
jion 方法將數組轉換成字符串,返回該字符串,參數做爲分隔符
split() 方法將字符串裝換成數組,返回該數組第一個參數做爲分隔符,第二個參數表示返回前幾位,不給則所有返回
var arr = [1, 2, 3];str = arr.join('-');console.log(str);console.log(str.split('-'));console.log(str.split('-', 2));// 1-2-3// [1, 2, 3]// [1, 2]
複製代碼
兼容 IE9 及以上
用於對數組內容進行過濾,參數方法返回值決定對應元素的去留,若返回 false 則剔除該元素
// 數組去重示例var arr = [0, 1, 2, 2, 3, 4, 4, 0, 1];funtion uniqe(arr) { return arr.filter(function(item, index, arr) { //當前元素在數組中的第一個索引 === 當前索引值,則該元素沒有重複 return arr.indexOf(item) === index; });}// 方法缺陷:不能去除 [{}, {}]
複製代碼
類數組是是一種相似數組,如 arguments、NodeList 等,它們有 length 屬性,甚至有 forEach 屬性
類數組沒有繼承 Array.prototype,沒有 push、splice 等方法
類數組和數組的底層都是基於對象的鍵值對
不支持數組方法的類數組,能夠經過借用 Array.prototype 實現操做
var obj = { 2: 3, 3: 4, length: 2, push: Array.prototype.push}obj.push(1);obj.push(2);console.log(obj);// {// 2: 1,// 3: 2,// length: 4,// push: push(){}// __poroto__: {...}// }
複製代碼
對於這是道題,首先咱們要明白數組的 push 方法繼承於 Array.prototype,其次要了解 push 方法的內部過程,即在 length 位置存數據,而後 length 加一
Array.prototype.push = function (elem) { this[this.length++] = elem;}
複製代碼