[TOC]
## 5.2 Array類型
ECMAScript數組的每一項可以保存任何類型的數據,大小可以動態調整。
### 5.2.1 初始化數組實例
創建數組的基本方式有多種:
* 使用Array構造函數
~~~
var colors1 = new Array();
var colors2 = new Array(20);
var colors3 = new Array('a',1);
~~~
1. 如果調用構造函數 Array() 時沒有使用參數,那么返回的數組為空,length 字段為 0。
2. 當調用構造函數時只傳遞給它一個數字參數,該構造函數將返回具有指定個數、元素為 undefined 的數組。
3. 當其他參數調用 Array() 時,該構造函數將用參數指定的值初始化數組。
* 使用數組字面量
使用數組字面量表示法,由一對包含數組項的方括號表示,多個數組項之間用逗號隔開。
~~~
var colors = []; // 空數組
var colors2 = [1,2]; // 包含兩個數組項的數組
~~~
數組的項數保存在其length屬性中,不小于0,可讀寫。可通過減小來移除數組項。所有數組項默認是undefined(在不設置的情況下)。
* 檢測數組(Array.isArray())
Array.isArray()判斷是否是數組,傳入一個數組作為參數。
~~~
var colors = [];
console.log(Array.isArray(colors)); // true
console.log(Array.isArray(1)); // false
~~~
### 5.2.2 轉換方法
| 方法 | 描述 |
| --- | --- |
| toString() | 返回由數組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串。 |
| toLocaleString() | 把數組轉換為本地數組,并返回結果。 |
| valueOf() | 返回數組本身。 |
| join() | 返回指定分隔符的包含所有數組項的字符串。(如果不傳值或傳undefined,則默認用逗號分隔) |
如果數組中的某一項是null或undefined,則在以上方法返回結果中意**空字符串**表示。
### 5.2.3 棧方法與隊列方法
| 方法 | 描述 |
| --- | --- |
| push() | 接受任意數量參數,逐個加到數組末尾,返回修改后數組的長度。 |
| pop() | 從數組末尾移除最后一項,減少數組的length值,然后返回被移除的項。*空數組則返回undefined* |
| shift() | 從數組頭部移除第一項,減少length值,并返回被移除的項。*空數組則返回undefined* |
| unshift() | 接受任意數量參數,逐個加到數組頭部,返回修改后數組的長度。 |
### 5.2.4 重排序方法
| 方法 | 描述 |
| --- | --- |
| reverse() | 反轉數組項的順序,返回反轉后的數組。 |
| sort() | 接受一個比較函數作為參數,省略時按首字母編碼順序排序,返回排序后數組。|
### 5.2.5 操作方法
| 方法 | 描述 |
| --- | --- |
| concat() | 連接兩個或更多的數組,并返回結果,參數可以是任意值或數組對象。 |
| slice(start,end) | 返回起始和結束之間不包括結束位置的項。start必須,end省略則默認末尾,負數等于加上數組長度,結束小于起始返回空數組。|
|splice(index,countDel,newitemX) | 向/從數組中添加/刪除/替換項目,返回被刪除的項,無刪除則返回空數組。|
### 5.2.6 位置方法
| 方法 | 描述 |
| --- | --- |
| indexOf(toFind,index) | 從數組開頭/index(可省) 查找項,返回查找項的位置,找不到返回-1。*比較時使用全等操作符* |
| lastIndexOf(toFind,index)| 從數組末尾或/index 往前查找,其余同上|
### 5.2.7 迭代方法
參數均為`function(item, index, array){ do something;}`
| 方法 | 描述 |
| --- | --- |
| every() | 對數組每一項運行給定函數,該函數對每一項都返回true,則返回true。 |
| some() | 對數組每一項運行給定函數,任一項返回true,則返回true。|
| forEach |對數組每一項運行給定函數,無返回項。 |
| filter() | 對數組每一項運行給定函數,返回該函數會返回true的項組成的數組。 |
| map | 對數組每一項運行給定函數,返回每項元素完成函數調用后的結果組成的數組。 |
**注意:迭代方法不會對原數組造成任何影響。forEach()和對數組進行for循環的不同之處也在于此。**
### 5.2.8 歸并方法
兩個方法的第一個參數是一個函數,該函數可接收四個參數;第二個參數為累積初值(省略默認為0)。
~~~
function(prev,cur,index,array){ do something; }
累積變量,默認為數組的第一個成員
當前變量,默認為數組的第二個成員
當前位置(從0開始)
原數組
~~~
| 方法 | 描述 |
| --- | --- |
| reduce() | 依次處理數組的每個成員,最終累計為一個值。從左到右處理(從第一個成員到最后一個成員) |
| reduceRight()| 依次處理數組的每個成員,最終累計為一個值。從右到左處理(從最后一個成員到第一個成員)|
- 前言
- 第一章 JavaScript簡介
- 第三章 基本概念
- 3.1-3.3 語法、關鍵字和變量
- 3.4 數據類型
- 3.5-3.6 操作符、流控制語句(暫略)
- 3.7函數
- 第四章 變量的值、作用域與內存問題
- 第五章 引用類型
- 5.1 Object類型
- 5.2 Array類型
- 5.3 Date類型
- 5.4 基本包裝類型
- 5.5 單體內置對象
- 第六章 面向對象的程序設計
- 6.1 理解對象
- 6.2 創建對象
- 6.3 繼承
- 第七章 函數
- 7.1 函數概述
- 7.2 閉包
- 7.3 私有變量
- 第八章 BOM
- 8.1 window對象
- 8.2 location對象
- 8.3 navigator、screen與history對象
- 第九章 DOM
- 9.1 節點層次
- 9.2 DOM操作技術
- 9.3 DOM擴展
- 9.4 DOM2和DOM3
- 第十章 事件
- 10.1 事件流
- 10.2 事件處理程序
- 10.3 事件對象
- 10.4 事件類型
- 第十一章 JSON
- 11.1-11.2 語法與序列化選項
- 第十二章 正則表達式
- 12.1 創建正則表達式
- 12.2-12.3 模式匹配與RegExp對象
- 第十三章 Ajax
- 13.1 XMLHttpRequest對象
- 你不知道的JavaScript
- 一、作用域與閉包
- 1.1 作用域
- 1.2 詞法作用域
- 1.3 函數作用域與塊作用域
- 1.4 提升
- 1.5 作用域閉包
- 二、this與對象原型
- 2.1 關于this
- 2.2 全面解析this
- 2.3 對象
- 2.4 混合對象“類”
- 2.5 原型
- 2.6 行為委托
- 三、類型與語法
- 3.1 類型
- 3.2 值
- 3.3 原生函數