这两个方法的功能与以前学的出栈和入栈方法是一样的,都是在原数组中操作的,并非生成一个修改后的新数组。push()在数组的尾部添加一个或多个元素,并返回数组新的长度;pop()删除数组的最后一个元素,减少数组长度并返回删除的值。
类似于push()和pop(),只不过它们是在数组的头部进行添加和删除操作。unshift()是在数组头部添加一个或多个元素(将已存在的其他元素移动到更高索引的位置),返回数组的新长度;shift()则是删除数组的第一个元素并将其返回(删除后数组的其他元素会下移一个位置填充数组头部的空缺)。注意,使用unshift()一次性插入多个元素与多次调用unshift()插入多个元素的表现是不一样的,如下所示:
var a=[]; a.unshift(1); a.unshift(2); alert(a.toString());//a=[2,1] a.unshift(3,4); alert(a.toString());//a=[3,4,2,1],并非是像前面那样一个一个向头部插入 delete a[0]; alert(a.toString());//a=[,4,2,1],使用delete删除元素只是将该位置元素置为undefined,并不是从数组中移除
在这里可以看到,使用delete删除数组元素并不会改数组的length属性,也不会将元素从高索引处下移来填充空缺位。这样,使用delete删除元素会使得数组变成稀疏数组。
该方法是在数组中插入或删除元素的通用方法,它会修改原数组的元素,并非是创建一个修改后的新数组。splice()有多个参数,功能如下:
因此,根据提供参数的个数,splice()方法有多个实现功能:
var a=[1,2,3,4,5,6,7,8]; var n1=a.splice(4);//n1=[5,6,7,8],a=[1,2,3,4] var n2=a.splice(1,2);//n2=[2,3],a=[1,4] var n3=a.splice(1,0,'a','b');//n3=[],a=[1,'a','b',4] var n4=a.splice(1,2,[1,2],3);//n4=['a','b'],a=[1,[1,2],3,4]
该方法用于在数组后面拼接新的元素,所要添加的元素作为参数传递到concat()方法中,这个方法不会修改原数组,返回的是新创建的拼接后的数组。值得注意的是:若参数包含数组,则拼接进来的是参数数组的元素,而不是将整个数组作为一个整体拼接进来,但它又不会递归扁平化数组的数组(也即作为参数的数组内部若还嵌套着数组,此时该嵌套的数组将作为一个整体拼接进来)。
var a=[1,2,3]; a.concat(4,5); //返回[1,2,3,4,5] a.concat([4,5]);//返回[1,2,3,4,5] a.concat([4,5],[6,[7,8]]);//返回[1,2,3,4,5,6,[7,8]],length=7
该方法将数组中所有元素都转换为字符串并连接在一起,返回最后生成的字符串。它可以接收一个字符串参数用来作为分隔符,若不指定分隔符则默认使用逗号。
与不使用任何参数调用join()方法返回的字符串是一样的。
var a=[1,2,3]; a.join();// 输出"1,2,3" a.join(" "); //输出"1 2 3" a.toString(); //输出"1,2,3"
该方法将数组中元素的顺序颠倒,返回逆序的数组。它在原数组的基础上改变,并非创建新的逆序后的数组。
该方法将数组中的元素按字母表顺序排序并返回排序后的数组。同样,它也是在原数组的基础上进行更改。若想要按照其他方式进行排序,则可以向sort()方法传递一个比较函数。
var a=[33,4,1111,222]; a.sort(); //返回[1111,222,33,4],并非是我们以为的按数值大小排序 a.sort(function(a,b){ //按数值从小到大排序 return a-b; }); a.sort(function(a,b){ //按数值从大到小排序 return b-a; });