数组总共有22种方法,本文将其分为对象继承方法、数组转换方法、栈和队列方法、数组排序方法、数组拼接方法、创建子数组方法、数组删改方法、数组位置方法、数组归并方法和数组迭代方法共10类来进行详细介绍
对象继承方法
数组是一种特殊的对象,继承了对象Object的toString()、toLocaleString()和valueOf()方法
【toString()】
toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
[注意]该方法的返回值与不使用任何参数调用join()方法返回的字符串相同
[1,2,3].toString();//'1,2,3' ['a','b','c'].toString();//'a,b,c' [1,[2,'c']].toString();//'1,2,c'
由于alert()要接收字符串参数,它会在后台调用toString()方法,会得到与toString()方法相同的结果
alert([1,2,3]);//'1,2,3'
【toLocaleString()】
toLocaleString()是toString()方法的本地化版本,它经常也会返回与toString()方法相同的值,但也不总是如此。因为,它调用元素的是toLocaleString()方法将每个数组元素转化为字符串
var person1 = { toLocaleString: function(){ return 'Nikolaos'; }, toString: function(){ return 'Nicholas'; } }; var person2 = { toLocaleString: function(){ return 'Grigorios'; }, toString: function(){ return 'Greg'; } }; var people = [person1,person2]; console.log(people.toString());//'Nicholas,Greg' console.log(people.toLocaleString());//'Nikolaos,Grigorios'
如果数组中的某一项的值是null或者undefined,则该值在toLocaleString()和toString()方法返回的结果中以空字符串表示
var colors = [1,undefined,2,null,3]; console.log(colors.toString());//'1,,2,,3' console.log(colors.toLocaleString());//'1,,2,,3'
【valueOf()】
valueOf()方法返回数组对象本身
var a = [1, 2, 3]; console.log(a.valueOf());// [1, 2, 3] console.log(a.valueOf() instanceof Array);//true
数组转换方法
【join()】
Array.join()方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组
数组继承的toLocaleString()和toString()方法,在默认情况下都会以逗号分隔的字符形式返回数组项;而join()方法可以使用不同的分隔符来构建这个字符串,join()方法只接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串
如果不给join()方法传入任何值,则使用逗号作为分隔符
var a = [1,2,3]; console.log(a.join());//'1,2,3' console.log(a.join(' '));//'1 2 3' console.log(a.join(''));//'123' var b = new Array(10); b.join('-');//'---------',9个连字符组成的字符串
若join()方法的参数是undefined,标准浏览器以逗号为分隔符返回字符串,而IE7-浏览器以'undefined'为分隔符返回字符串
//标准浏览器为'1,2,3';IE7-浏览器为'1undefined2undefined3' var a = [1,2,3]; console.log(a.join(undefined));
如果数组中的某一项的值是null或者undefined,则该值在join()方法返回的结果中以空字符串表示
var colors = [1,undefined,2,null,3]; console.log(colors.join());//'1,,2,,3'
该方法也可以用于类数组对象上
console.log(Array.prototype.join.call('hello', '-'));// "h-e-l-l-o" var obj = { 0: 'a', 1: 'b', length: 2 }; console.log(Array.prototype.join.call(obj, '-'));// 'a-b'
[注意]若对象没有length属性,就不是类数组,也就不能调用数组的方法
var obj = { 0: 'a', 1: 'b' }; console.log(typeof Array.prototype.join.call(obj, '-'));//''
栈和队列方法
push()和pop()方法允许将数组当作栈来使用。unshift()和shift()方法的行为非常类似于push()和pop(),不一样的是前者是在数组的头部而非尾部进行元素的插入和删除操作
栈是一种LIFO(Last-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部。javascript为数组专门提供了push()和pop()方法,以便实现类似栈的行为
队列数据结构的访问规则是FIFO(first-in-first-out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。结合使用shift()和push()方法,可以像使用队列一样使用数组
【push()】
push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。所以,该数组会改变原数组