[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 原生函数