Array类型是ECMAScript中最常用的引用类型。ECMAScript中的数据与其它大多数语言中的数组有着相当大的区别。虽然ECMAScript中的数据与其它语言中的数组一样都是数据的有序列表,但不同的是,ECMAScript数组中的每一项可以保存任何类型的数据,无论是数值、字符串或者是对象。同时,ECMAScript中的数组大小是可以动态调整的,即可以根据数据的添加自动增长以容纳新增的数据。下面总结一下JavaScript中数组常用的操作函数及用法。
•创建数组
创建数组主要有构造函数和数组字面量两种方法,如下所示:
var arr = new Array(); var arr = [];
对于构造函数,我们可以传递一个数值创建包含给定项数的数组,如下:
var arr = new Array(3); //数组长度为3
也可以直接传递存放于数组中的值,如下:
var arr = new Array("red","green","blue");
不论哪种方式,推荐使用数组字面量的形式来创建数组。
•检测数组
对于单一的全局执行环境而言,使用instanceof操作符就可以检测是否为数组,例如:
var arr = [1,2,3]; console.log(arr instanceof Array); //true
但如果网页中包含多个框架,也就包含多个全局执行环境,ES5新增了Array.isArray()方法来确定某个值是否为数组,而不管它是在哪个全局执行环境中被创建的,如下:
if(Array.isArray(arr)){ //执行某些操作 }
•数组字符串转换
每个对象都具有toLocaleString()、toString()和valueof()方法。调用数组的toString()方法会返回数组中每个值的字符串形式拼接而成并且以逗号分隔的字符串,调用数组的valueof()方法返回的还是数组,实际上调用的是数组每一项的toString()方法,如下:
var arr = ["red","green","blue"]; console.log(arr.toString()); //red,green,blue console.log(arr.valueof()); //red,green,blue console.log(arr); //red,green,blue
而调用数组的toLocaleString()方法,与toString()不同的是它会调用数组每一项的toLocaleString()方法,将每一项toLocaleString()方法的返回值以逗号分隔拼接成一个字符串。而使用join()方法,可以使用不同的分隔符来构建这个字符串,如下:
var arr = ["red","green","blue"]; console.log(arr.join(",")); //red,green,blue console.log(arr.join("||")); //red||green||blue
•数组的添加和删除
push()方法接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改修改后数组的长度,例如:
var arr = [1,2,3]; arr.push(4,5); console.log(arr); //[1,2,3,4,5]
与push()相对的是pop()方法,它从数组末尾移除最后一项,并返回移除的项,例如:
var arr = [1,2,3]; arr.pop(); //3 arr.pop(); //2 console.log(arr); //[1]
另外两个使用的方法是shift()和unshift(),它们与pop()和push()类似,shift()方法用于从数组的起始位置移除项并返回移除项,例如:
var arr = [1,2,3]; arr.shift(); //1 arr.shift(); //2 console.log(arr); //[3]
unshift()方法与shift()用途相反,它能够在数组前端添加任意个项并返回新数组的长度,例如:
var arr = [1,2,3]; arr.unshift(4); //返回长度4 arr.unshift(5); //返回长度5 console.log(arr); //[1,2,3,4,5]
•数组的翻转与排序
数组提供的翻转方法为reverse(),它会反转数据项的顺序,例如:
var arr = [1,2,3]; arr.reverse(); console.log(arr); //[3,2,1]
sort()也可以对数组进行排序,不过它的默认排序方式并不是大小,而是根据对应字符串逐个编码排序的。sort()方法可以接收一个比较函数,进行自定义排序,例如:
function compare(value1,value2){ return value1-value2; } var arr = [1,3,2,5,4]; arr.sort(compare); console.log(arr); //[1,2,3,4,5]
•数组连接
concat()方法会创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组,原来的数组不变,例如:
var arr = [1,2,3]; var arr2 = arr.concat(4,[5,6]); console.log(arr); //[1,2,3] console.log(arr2); //[1,2,3,4,5,6]
•数组分割
slice()方法接收一个或两个参数,即要返回项的开始位置和结束位置。如果只要一个参数,则返回从指定位置开始到数组结束的所有项。如果接收两个参数,则返回起始和结束位置之间的所有项但不包括结束位置的项,例如:
var arr = [1,2,3,4,5]; var arr2 = arr.slice(1); //[2,3,4,5] var arr3 = arr.slice(1,3); //[2,3]
注意,slice()方法不会影响原来的数组。
•splice()方法