对象浅拷贝和深拷贝的原理
首先浅拷贝和深拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一层对象的属性,而深拷贝则递归拷贝了所有层级。
对象浅拷贝
浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。
myObj = { value1: 10, value2: 20, value3: { name: 'Mary', old: 23 } };
let copyObj = { ...myObj };
copyObj.value1 = 15;
console.log(myObj.value1); // 10
copyObj.value3.name = 'Jack';
console.log(myObj); // { value1: 10, value2: 20, value3: { name: 'Jack', old: 23 } }
console.log(copyObj); // { value1: 15, value2: 20, value3: { name: 'Jack', old: 23 } }


对象深拷贝
myObj = { value1: 10, value2: 20, value3: { name: 'Jack', old: 23 } };
let deepCopyObj = JSON.parse(JSON.stringify(myObj));
deepCopyObj.value1 = 20;
console.log(myObj.value1); // 10
deepCopyObj.value3.name = 'June';
console.log(myObj); // { value1: 10, value2: 20, value3: { name: 'Jack', old: 23 } }
console.log(deepCopyObj); // { value1: 20, value2: 20, value3: { name: 'June', old: 23 } }



浙公网安备 33010602011771号