push、pop、unshift、shift这四个操作都改变了原来的数组,未创建新数组。
push:向数组的尾部追加元素,直接在原来的数组尾部添加,不会创建新数组。
var a= new Array();
var b = a.push('a');
console.log(a);// ['a']
console.log(b);// 1
pop:删除并返回数组的最后一个元素,数组长度减 1,如果数组已经为空,则 pop() 不改变数组,并返回 undefined。
var a = ['a','b','c'];
var b = a.pop();
console.log(a);// ['a','b']
console.log(b);// c
unshift:向数组的开头添加一个或者过个元素,并返回新的长度,不会创建新数组,会直接修改原数组。
var a = ['a','b'];
var b = a.unshift('c');
console.log(a);// ['c','a','b']
console.log(b);// 3 返回的是修改后的数组长度,并未生成新数组
shift:删除第一个数组元素,并返回删除的元素的值,如果数组是空的,不进行任何操作,返回undefined,此方法不会创建新数组,修改原来的数组。
var a = ['a','b','c'];
var b = a.shift();
console.log(a);// ['b','c']
console.log(b);// a 返回的是删除的数组元素
push和pop实现了类似栈(LIFO last-in-first-out)的行为,后进先出。
splice:往数组中添加或者删除,返回被删除的元素,该方法会改变原来的数组。
arr.splice(index,howmany,item1,.....,itemX)
index:必填,整数,规定添加或删除的元素位置,使用负数可以从数组结尾处规定位置。
howmany:必填,要删除的元素数量,如果是0,就不删除,是添加元素。
item1,.....,itemX:可选,向数组添加的新元素。
// 向数组中添加元素
var a = ['a','b','c'];
var b = a.splice(1,0,'a1','a2');// 从下标1开始添加元素
console.log(a);// ["a", "a1", "a2", "b", "c"]
console.log(b);// []
// 数组中删除元素
var a = ['a','b','c'];
var b = a.splice(1,1);// 从下标为1的地方,删除1个元素,删除下标为1的元素
console.log(a);// ["a", "c"]
console.log(b);// ["b"]
// 数组中替换元素
var a = ['a','b','c'];
var b = a.splice(1,1,'d');// 替换下标为1的数组元素
console.log(a);// ["a", "d", "c"]
console.log(b);// ["b"]
delete:数组长度不变
var a = ['a','b','c'];
delete a[1];
console.log(a);// ["a", empty, "c"]