7.0 数组
数组是一种特殊对象。
7.1创建数组的三种方式
数组直接量:var a=[1,2,3];
new运算符创建数组:var a=new Array(7);参数为数组长度(稀疏数组)
创建并初始化数组:var a=new Array(1,2,3,4,"abc");
7.2 数组元素的读和写
var a=[1,2,3]; a[0] =>1; a[0]=3;
7.3 稀疏数组
var a1=[,,]; =>[undefined,undeifned,undefined]
var a2=new Array(3); =>该数组中根本没有元素
0 in a1 =>true
0 in a2 =>false
7.4 数组长度
length属性表示的数组长度是数组最大索引值+1
Object.defineProperty(array object,"length",{ writable:false }) 可设置length属性为只读
7.5 数组元素的添加和删除
var a=[1,2,3];
delete a[1]; =>a在索引1的位置不再有元素
1 in a =>false:数组索引1并未在数组中定义
a.length =>3,delete操作并不影响数组长度
7.6 数组遍历
for循环,forEach()循环
7.7 多维数组
7.8 数组方法
join(连接符) : 将数组元素转化为字符串并通过指定连接符连接起来,返回新字符串
split(分隔符):根据分隔符分割字符串并转化为数组元素,返回新数组
reverse(): 将数组元素顺序颠倒顺序
sort(Function): 默认按照ASCII码顺序排序,也可通过参数函数修改为指定顺序,返回修改后的原数组
concat(元素): 创建并返回一个新数组,连接的是数组元素,而不是数组本身
slice(开始位置,结束位置) : 返回指定数组的一个片段或子数组,开始位置和结束位置数值可为负数,如-1表示最后一个元素
splice(开始删除元素位置,结束删除元素位置,插入值) : 在数组中插入或删除元素的通用方法,返回删除元素组成的新数组,原数组元素也被删除
push()和pop() : push在数组尾部添加新元素,pop删除最后一个元素,类似栈,先进后出
unshift()和shift() : unshift在数组头部添加新元素,shift删除头部元素,类似 队列,先进先出
toString和toLocaleString(): 将数组每个元素转化为字符串并且输出用逗号分隔的字符串列表
7.9 ECS5 数组方法
大多数ECS5方法接受三个参数:第一个是 数组元素、第二个是 元素的索引、 第三个是 数组本身
forEach() : 从头至尾遍历数组,为每个元素调用指定的函数
map(): 将调用的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值
filter(): 返回的数组元素是调用的数组的一个子集,传递的函数是用来逻辑判定的:该函数返回true或false
every()和some(): 两个方法是数组的逻辑判定:它们对数组元素应用指定的函数进行判定,返回true或false
indexOf(搜索元素,搜索起始位置)和lastIndexOf(搜索元素,搜索起始位置): 搜索指定元素,返回索引值,若为-1表示未找到
reduce()和reduceRight(): 使用指定的函数将数组元素进行组合,生成单个值。
例子: var a[1,2,3,4];
a.every(function(x){ return x<10; }) =>true: 所有的值小于10
a.some(function(x){ return x<3 }) =>true:一部分值小于3
a.filter(function(x){ return x<3 }) => [1,2]
a.map(function(x){ return x*x }) =>[1,4,9,16]
var b=sum;a.forEach(function(x){ sum+=x; }) =>10
a.indexOf(2) =>返回索引值1
a.reduce(function(x,y){ return x+y }) => 数组求和,值为10
7.10 数组类型
Array.isArray() =>true,isArray可判定是否是数组
7.11 类数组对象
具有数组部分特性的对象,通过call()方法可以使其他对象可以使用数组的部分方法
var a={ "0":"a","1":"b","2":"c",length:3 }; =>类数组对象
Array.prototype.join.call(a,"+") =>"a+b+c"
7.12 作为数组的字符串
var s="Javascript";
Array.prototype.join.call(s," "); =>"J a v a s c r i p t"
Array.prototype.filter.call(s,function(){ =>过滤字符串中的部分字符
return x.match(/[^aeiou]/);
}).join(""); =>"JvScrpt"
备注:字符串是不可变值,故当把它们作为数组看待时,它们是只读的。如push(),sort()等数组方法会修改数组,它们在字符串上是无效且会出错无提示