对象浅拷贝和深拷贝的原理

首先浅拷贝和深拷贝只针对像 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 } }

 

 

posted @ 2021-12-07 18:09  远看山有色  阅读(82)  评论(0)    收藏  举报