数组的基础结构
数组也是对象数据类型的 typeOf []
console.log(typeOf [])// -> "object"
数组也有属性名, 只不过属性名是数字, 我们把数字属性名称之为它的索引;
数组是以数字作为索引, 索引从零开始, 有一个 length 属性代表数组的长度
- // [12,23,34]
- // 0: 12
- // 1: 23
- // 2: 34
- // length: 3
类数组: 类似于数组, 但是不是数组
通过 getElementsByTagName 获取的元素集合是类数组;
函数中的实参集合 arguments 也是类数组
...
循环数组中的每一项
- // for 循环
- var ary = [12,23,34,45];
- Array.prototype.aa = 100;
- for(var i=0;i<ary.length;i++){
- console.log(ary[i]) // -> 12,23,34,45
- }
- // for in 循环
- for(var key in ary){
- // -> key: 属性名 (数组中的属性名是索引)
- console.log(ary[key]) // -> 12,23,34,45,100
- }
- // -> 区别: for 循环只能遍历到数组的私有的一些属性, 儿 for in 循环可以吧一些定义的公共属性也能遍历到
数组中的常用方法
数组中有很多常用方法'console.dir(Array.prototype)'
四个方面记忆数组的方法
方法的意义和作用
方法的参数
方法的返回值
通过此方法, 原来的数组是否发生了改变
实现数组的增加, 修改, 删除
增加
push()
向数组的末尾增加新内容;
参数: 一个或多个, 任何数据类型都可以; 想要给数组末尾追加什么, 直接传递到 push 方法中即可, 传递多个用逗号隔开
返回值: 新增后数组的长度
原有数组改变了
- var ary = [12,23,34];
- ary.push(45,{name:'lilei'},function(){}); // -> 6
- console.log(ary); // -> [12, 23, 34, 45, {...}, ƒ]
- unshift()
向数组的开头增加新内容;
参数: 一个或多个, 任何数据类型都可以;(可以是多个任意数据类型的值)
返回值: 新增后数组的长度
原有数组改变了
- var ary = [12,23,34]
- ary.unshift(45,{name:'lilei'},function(){}); // -> 6
- console.log(ary); // -> [45, {...}, ƒ, 12, 23, 34]
把数组当做一个普通对象, 使用对象键值对的操作, 给其设置新的属性 (索引)
向数组的末尾添加新的内容
- var ary = [12,23,34];
- ary[ary.length] = 45;
- console.log(ary) // -> [12, 23, 34, 45]
删除
pop(): 删除数组中的最后一项
参数: 无
返回值: 别删除的最后一项
原有数组改变
- var ary = [12,23,34];
- ary.pop()
- console.log(ary) // -> [12,23]
shift(): 删除数组中的第一项
参数: 无
返回值: 被删除的那一项
原有数组改变了
删除第一项之后, 后面的每一项索引都要向前进一位 (导致后面项的索引发生改变)
- var ary = [12,23,34];
- ary.shift()
- console.log(ary) // -> [23,34]
- delete
把数组当做普通的对象操作
delete ary[索引]; 删除指定索引项
当前项被删除后, 其他项索引不会改变
当前数组的长度也不会改变
- var ary = [12,23,34];
- delete ary[0]
- console.log(ary) // -> (3) [empty, 23, 34]
- ary.length--
删除数组最后一项
- var ary = [12,23,34];
- ary.length--;
- console.log(ary) // -> [12,23]
- splice
数组中内置方法, 本意删除, 但可以实现数组的增加 / 修改 / 删除
splice(n,m): 从索引 n 开始, 删除 m 个 (m 不写是删除到数组的末尾,)
返回值: 被删除的内容的新数组
原有数组改变
- var ary = [12,23,34];
- ary.splice(1,2); // 返回:[23,34]
- console.log(ary) // -> 12
splice(0): 清空数组
- var ary = [12,23,34];
- ary.splice(0);
- console.log(ary) // -> []
splice(): 一项也不删, 返回一个空数组
- var ary = [12,23,34];
- ary.splice();
- console.log(ary) // -> [12, 23, 34]
splice 实现修改
splice(n,m,x): 在原有删除的基础上用 x 代替原有项
- var ary = [12,23,34];
- ary.splice(1,1,45);
- console.log(ary) // -> [12, 45, 34]
splice 实现增加
splice(n,0,x): 在修改的基础上, 一项都不删除, 把 x 插入到索引 n 的前面
splice(0,0,x): 向数组开头增加新内容
splice(ary.length,0,x): 向数组末尾增加新内容
splice(0,1): 删除数组第一项
splice(ary.length-1): 删除数组最后一项
- var ary = [12,23,34];
- ary.splice(1,0,45);
- console.log(ary); // -> [12, 45, 23, 34]
- ary.splice(0,0,56);
- console.log(ary); // -> [56, 12, 45, 23, 34]
来源: http://www.jianshu.com/p/6e13f679d37f