js的数组与其他语言数组不同,数组中的每项可以包含不同类型的值。
声明
两种方式声明Array
1、var a=new Array(3)//长度为3的数组
var b=Array(3)可以省略new关键字
var c= new Array("red","blue","yellow")包含3个字符串的数组
2、自变量
var colors=["red","blue","yellow"];
访问
colors[0]
检测数组
ECMscript3使用instenceof确定某个对象是不是数组
if(value instanceof Array)
{
}
ECMscript5新增了Array.isArray()判断是否为数组
if(Array.isArray())
{
}
转换方法
所有对象都有toLocaleString()、toString()、valueOf()方法。
toString()返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。
valueOf()返回的还是数组。
toLocaleString()方法经常返回与toString()、valueOf()相同的值,但也不总如此。当调用数组的toLocaleString()方法时,它也会创建一个数组值的以逗号分割的字符串。与前面两方法的不同之处在于,调用的是每一项的toLocaleString()方法。
var colors=["red","blue","yellow"];
colors.join("||") //输出 red|blue||yellow
join重现了tostring()方法。如果不传参数,或者给它传入undefined,则使用逗号作为分割;ie7以下会使用undefined作为分割。
栈方法
push() 可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后的数组长度。
pop()从数组末尾移除最后一项,减少length的值,并返回删除的项。
队列方法
shift()移除数组中第一项并返回该项,同时将数组的长度减1。
unshift()在数组前端添加任意项,并返回新数组的长度。
重排序方法
reverse()反转数组项的顺序。
sort() 默认情况下,按升序排列数组项。为了实现排序,sort方法会调用数组项的tostring()转型方法,然后比较得到的字符串,已确定如何排序。即使数组中每一项都是数组,sort比较的也是字符串。
sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。
比较函数结束2个参数,如果第一参数应该位于第二个参数之前则返回一个负数,如果2个参数相等返回0,如果第一个参数应该位于第二个个参数的后台返回一个正数。
操作方法
concat()基于当前数组中的所有项创建一个新的数组。这个方法,先创建当前数组的一个i副本,然后将收到的参数添加到这个副本的末尾,最后返回新构的数组。
slice()基于当前数组中的一或多个项创建一个新数组。接收一或两个参数,既返回项的开始和结束位置。如果接受一个参数,返回该参数指定位置以后的所有项。如果两个参数,则一个是开始一个是结束位置中间所有项,但不包含结束位置的项。slice()不会影响原数组。
splice() 数组中最强大的方法。
var colors=['red','green','blue'];
删除:指定2个参数,删除第一项的位置和要删除的项数。splice(0,2)删除数组前2项。
var removed=colors.splice(0,1);//删除第一项
alert(colors)//输出 green,blue
alert(removed)//输入red 返回的数组中只包含一项。
插入:提供3个参数,开始位置、要插入的项数,插入项。如果要插入多个项,可以再出 入 参数4、参数5,以致更多的项。
removed=colors.splice(1,0,"yellow","orange")//从位置1开始插入2项
alert(colors)//输出green,yellow,orange,blue
alert(removed)//返回空数组。
替换:
removed=colors.splice(1,1"red","purple")
alert(colors)//green,red,purple,orange,blue
alert(removed)//yellow 返回数组中只包含一项
位置方法
ECMScript5为数组实例新增了2个位置方法:indexOf()和lastIndexOf(),要查找的项和(可选的)查找起点位置的索引。indexOf()从数组的开始向后查找;lastIndexOf()从数组的末尾向前查找。都返回查找项所在的位置,未找到返回-1。
迭代方法
ECMScript5定义了5个迭代方法。都接收2个参数:要在每一项上运行的函数和(可选的)运行在该函数的作用域对象,会影响this的值。
缩小方法
ECMScript5还新增了2个缩小数组的方法:reduce()和reduceRight();这个俩个方法会迭代数组中的每一项,然后构建一个最终的返回值。reduce()从第一项开始向后,reduceRight();从最后一项向前。
这连个方法都接收2个参数,一个是在每一项上运行的函数,一个是作为缩小基础的初始值(此参数可选)。
每项上运行的函数接收4个参数,前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传个下一项。
var value=[1,2,3,4,5];
var sum=values.reduce(function(prev,cur,index,array){
return prev+cur;
})
alert(sum);//15
此一次执行reduce,prev等于数组第一项1,cur等与数组第一项2,返回3,第二次执行reduce()prev等于3,cur等于第3项3。这个过程会持续到把数组中的每一项都访问一遍,最后返回结果。
reduceRight()作用类似,只不过方向向反。