- 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存。
- 深拷贝(deep copy):复制并创建一个一模一样的对象,不共享内存,修改新对象,旧对象保持不变。
浅拷贝
浅拷贝一般用在基本数据类型,当变量b复制变量a之后,对b做出修改,会影响a的值
使用JS进行举例:
let obj1={
name:"张三",
age:18
}
let obj2=obj1;
obj2.name="李四"
console.log("obj1=",obj1);
console.log("obj2=",obj2);
我们先定义对象obj1,然后,将obj1拷贝给obj2,此时对obj2进行修改,打印到控制台,会发现obj1的属性也会发生变化。
深拷贝
深拷贝:我们有两个变量a,b,将a变量的值拷贝给b之后,对b进行修改,对a不会产生影响
对于深拷贝有很多种方法,我们一一举例:
深拷贝数组
slice()
let arr1=[1,2,3]
let arr2=arr1.slice();
console.log("arr1=",arr1);
arr2[0]=100;
console.log("arr2=",arr2);
concat()
let arr1=[1,2,3]
let arr2=arr1.concat();
console.log("arr1=",arr1);
arr2[0]=100;
console.log("arr2=",arr2);
Array.from()
let arr1=[1,2,3]
let arr2=Array.from(arr1)
console.log("arr1=",arr1);
arr2[0]=100;
console.log("arr2=",arr2);
...拓展运算符
let arr1=[1,2,3]
let arr2=[...arr1]
console.log("arr1=",arr1);
arr2[0]=100;
console.log("arr2=",arr2);
深拷贝对象
Object.assign()
let obj1={
name:"张三",
age:18
}
let obj2=Object.assign({},obj1);
obj2.age=20;
console.log("obj1=",obj1);
console.log("obj2=",obj2);
...拓展运算符
let obj1={
name:"张三",
age:18
}
let obj2={...obj1}
obj2.age=20;
console.log("obj1=",obj1);
console.log("obj2=",obj2);