ECMAScript中的数组和其他语言的数组有相当大的区别,虽然ECMAScript的数组与其他语言的数组一样都是数据的有序列表,但是与其他语言不同的是ECMAScript的数组每一项存的可以是不同类型的数据。也就是说数组的第一个位置可以是字符串,第二个位置可以是数值。并且数组大小可以动态调整。
创建数组的方式有两种:
第一种是使用Array构造函数
var colors = new Array();
如果预先知道数组大小可以给构造函数传递数组大小,得到的数组就会有那么多位置(每一项的值都是undefined)。
var colors = new Array(20);
也可以向Array构造函数传递数组中应该包含的项,以下代码创建了包含了3个字符串的数组
var colors = new Array(“blue”,”red”,”white”);
当传递一个参数时,如果传入的参数是一个整数那么就会创建一个整数大小的数组,如果是其他类型的数据,那么就会创建一个包含这个值的只有一项的数组
var colors = new Array(3);//创建一个大小为3的数组
var colors = new Array(“Greg”);//创建包含一项,即字符串”Greg”的数组
另外在使用Array构造函数时可以省略new操作符,效果是一样的.
第二种是使用数组字面量的方式,数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开
var colors = [“red”,”blue”];//创建一个包含两个字符串的数组
var colors = [];//创建一个空数组
var colors = [1,2,];//不要这样!!!会创建一个2项或者3项的数组,在IE中会创建一个3项的数组,在Firefox,safari,chrome,Opera会创建一个2项的数组。
在使用字面量创建数组是不会调用Array构造函数(Firefox例外)
数组的索引从0开始,数组有一个length属性,他不是只读的可以改写.数组的最后一个索引的大小是length-1.
可以使用length属性向数组的最后添加数据
var colors = [“red”,”blue”];//创建一个包含两个字符串的数组
colors[colors.length] = “black”;//新增第三项
提示:
数组最多可以包含4 294 967 295项。
数组的转换方法toLocaleString(),toString(),valueof(),其中调用数组的toString()和Valueof()会返回相同的值。,即由每个值的字符串形式拼接而成的由一个逗号分隔的字符串。
var colors = [“red”,”blue”];//创建一个包含两个对象的数组
alert(colors);//red,blue
因为此方法会在后台调用toString方法,所以会返回与调用toString方法一样的结果。
alert(colors.toString());//red,blue
alert(colors.valueof());//red,blue1
可以使用join方法改变数组项之间的分隔符
var colors = [“red”,”blue”];//创建一个包含两个字符串的数组
alert(colors.join(“,”))//red,blue
alert(colors.join(“||”))//red||blue
数组的栈方法
首先在讲解栈方法之前我们先说一下栈这种数据结构,栈的特点是先进后出,就像往一个东西,你先放进去的东西会被后面的东西覆盖,如果你要取东西值能从杯子的上面开始取,也就是先放进去的最后才能取出来,而最后放进去的东西确实最先取出来的.
ECMAScript为了为数组实现栈的特性专门提供了push()和pop()方法
push()方法可以接受任意数量的参数,把他们逐个添加到数组的末尾,并返回修改后的的字符串长度,而pop()方法则是从数组的末尾一处最后一项,减少数组的length值,然后返回移除的项。
var colors = new Array();//创建一个数组
var count = colors.push(“red”,”blue”);//推入两项
alert(count);//2
count = colors.push(“black”)//推入另外一项
alert(count)//3
var item = colors.pop();//取得最后一项
alert(item);//”black”
alert(colors.length);//2
队列方法
队列的访问方法是先进先出。队列在数组的末端添加项,从数组的前端移除项。
插入方法不变依然是push(),取得数组第一项的方法是shift(),他可以移除数组第一项并且返回该项,同时将数组长度减一。
var colors = enw Array();//创建一个空数组
var count = colors.push(“red”,”grern”);//推入两项
alert(count);
count = colors.push(“black”);//推入另一项
alert(count);//3
var item = colors.shift();//取得第一项
alert(item);//”red”
alert(colors.length);//2
还有一个unshift()方法,他与shift方法的作用恰好相反,他是在数组的前面插入任意项,并且返回数组长度。
重排序方法
reverse()方法会将数组的顺序颠倒;
sort()方法按照字符串大小比较将最小的字符串放在前面。
注意:默认的sort()方法按照字符串的大小进行比较,也就是说,你数组里面假设存下了23,3这两个整数,那么3最终的顺序会在23后面.
因此sort()防范可以接受一个比较函数,以便我们指定那个值在前面
比较函数接受两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数
`function compare(value1,value2){
if(value1 < value2){
return -1;
}
else if(value1 >value2){
return 1;
}
else{
return 0;
}
}’
操作方法
contact()这个方法会先基于当前数组创建一个副本,然后将接受到的参数加入到新的副本里面,最后返回新创建的数组。
slice(),它能够基于但前述组的一个或多个项创建新数组。slice会接受一个或者多个参数,即颜返回项的起始位置和终止位置。在只接受到一个参数的情况下会返回从当前位置一直到数组末尾的所有值。如果两个参数就会返回从第一个参数到第二个参数之间的所有项,但不包括第二个参数所代表的的那一项.
splice()方法可以算是最强大的数组方法了,他有很多种用法,主要用途是向数组中部插入项。
删除—可以删除任意数量的项,只需要指定两个参数,要删除的起始位置和要删除的项数,splice(0,.2)会删除数组中的前两项
插入—可以指定位置插入任意数量的项,只需要提供三个参数:起始位置,0(要删除的项),和要出入的项,splice(2,0,”red”,”green”)会从当前数组的位置2来时插入字符串“red”和“green”
替换—可以向指定位置插入任意项并且删除任意数量的项。