1. array.concat
语法: var newArray = oldArray.concat(value1[, value2[, ...[, valueN]]])
作用:将别的一个或多个数组与原数组相连接
- 返回值: 新数组。(不改变原数组内容)
- 是否改变原数组: 否
- 是否浅拷贝: 是
var arr1 = [0,1,2];
var arr2 = ["a","b","c"];
var arr3 = arr1.concat(arr2);
console.log(arr3); //[0,1,2,"a","b","c"],原数组arr1不受影响
注意:
a. 不同于push
,concat
多个数组时,只返回一维数组
//比较:push()与concat()
var arr1 = [0,1,2];
var arr4 = arr1.concat(3,[4,5]);
console.log(arr4); // [0,1,2,3,4,5]
var arr5 = arr1.concat(3,[4,5]);
console.log(arr5); // 5 push操作返回值是新数组length
console.log(arr1); //[0,1,2,3,[4,5]] arr1发生改变
b. shandow copy :浅拷贝
浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。
var arr1 = [0,1,2];
var arr2 = [6,[7,8]];
var arr3 = arr1.concat(3,[4,5],arr2);
console.log(arr3); // [0, 1, 2, 3, 4, 5, 6, [7,8]]
//改变arr2[1]的值后,arr3会随之改变
arr2[1].push(9); // arr2:[6,[7,8,9]]
console.log(arr3); // arr3:[0, 1, 2, 3, 4, 5, 6, [7,8,9]]
//同理:改变arr3[arr3.length-1]的值后,arr2也会随之改变
arr3[arr3.length-1][0] = 10; // arr3:[0, 1, 2, 3, 4, 5, 6, [10,8,9]]
console.log(arr2); //arr2: [6,[10,8,9]]
2.array.push
语法: arr.push(element1, ..., elementN)
作用:在原数组末尾添加元素或数组
- 返回值: 新数组length值
- 是否改变原数组:是
- 是否浅拷贝: 是
var arr1 = [0,1,2];
var arr2 = [3,4];
var newLen_1 = arr1.push(arr2); //4
console.log(arr1); //[0,1,2,[3,4]]
//改变arr2,arr1会发生改变
arr2.push(5); //arr2:[3,4,5]
console.log(arr1); //arr1:[0,1,2,[3,4,5]]
3.array.pop
语法: arr.pop()
作用: 删除数组最末尾的元素
- 返回值: 删除的元素
- 是否改变原数组: 是
var arr1 = [0,1,2];
var poped = arr1.pop();
console.log(poped); //2
console.log(arr1); //[0,1]
4.array.unshift
语法:arr.unshift([element1[, ...[, elementN]]])
作用: 在数组最开始位置添加元素(跟push()
刚好相反)
- 返回值 :新数组长度
- 是否改变原数组: 是
- 是否浅拷贝: 是
var arr1 = [0,1,2];
var arr2 = [3,4];
var newLen_1 = arr1.unshift(arr2); //4
console.log(arr1); //[[3,4],0,1,2]
//改变arr2,arr1会发生改变
arr2.unshift(5); //arr2:[5,3,4]
console.log(arr1); //arr1:[[5,3,4],0,1,2]
5.array.shift
语法:arr.shift()
作用:删除数组第一个元素(同pop()
刚好相反)
- 返回值: 删除的元素
- 是否改变原数组: 是
var arr1 = [0,1,2];
var poped = arr1.shift();
console.log(poped); //0
console.log(arr1); //[1,2]