一、数组的浅拷贝
1. 数组内的元素不是对象或数组
如果数组内的元素不是对象或者数组,那么浅拷贝通过数组的slice()或concat()方法即可完成
例如:
var a = [1,2,3,4,5,6];
var b = a.slice();
console.log(b);
a[0] = 11;
console.log(a);
console.log(b);
2. 数组内的元素是对象或数组
如果数组内的元素是对象或者数组,需使用JSON.parse(JSON.stringify(arr));的方式
var a = [{x : 1,y:2},{x:3,y:4}]
var b = JSON.parse(JSON.stringify(a));
console.log(b);
a[0].x = 11;
console.log(a);
console.log(b);
二、数组的深拷贝
数组的深拷贝只需用简单的赋值方式即可
var a = [1,2,3,4,5];
var b = a;
b[0] = 11;
console.log(a);
console.log(b);
三、对象的浅拷贝
对象的浅拷贝可以使用Object.assign()方法实现
var obj1= {
a:1
}
var obj2= Object.assign({}, obj1);
console.log(obj1=== obj2); //false
obj1.a= 2;
console.log(obj2.a) // 1
四、对象的深拷贝
对象的深拷贝可以和数组的深拷贝一样,通过引用赋值的方式实现;
var obj = {a:1,b:2};
var obj2 = obj;
console.log(obj2);
obj2.a = 11;
console.log(obj);
console.log(obj2);