深浅拷贝只针对像 Object, Array 这样的复杂对象的。
1、浅拷贝:是对栈内存地址的复制,实际上目标对象指针和源对象指向同一片堆内存空间;
2、深拷贝:是指建一个新的对象或数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用” 我们希望在改变新的数组(对象)的时候,不改变原数组(对象)。
实现深拷贝的方法:
(1)、 JSON内置的方法
var a={x:1}
var b=JSON.parse(JSON.stringfiy(a))
console.log(b)//{x:1}
b.x=2
console.log(b)//{x:2}
console.log(a)//{x:1}
原理:该方法是用JSON.parse将对象转为字符串,然后在用JSON.stringify转回对象json字符串转换为对象的时候,会自己去构建新的内存地址存放数据。
(2)、Object的内置方法assign
Object.assign:用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target),并返回合并后的target Object.assign(target, source1, source2);
var a={x:1}
var b=Object.assign({}, a);
console.log(b); //{x:1}
b.x = 2;
console.log(b); //{x:2}
console.log(a); //{x:1}
原理:该方法是用Object.assign对对象进行拼接, 将后续对象的内容插入到第一个参数指定的对象,不会修改第一个参数之后的对象,而我们将第一个对象指定为一个匿名空对象,实现深拷贝
来源:https://blog.csdn.net/m0_37816134/article/details/100977724