浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
javascript">const obj = {
name: 'zs',
age: 18,
hobby: {
sing: '中国红',
},
};
浅拷贝
javascript"> // 浅拷贝 方法一 : Object.assign({}, obj)
// const subObj = Object.assign({}, obj);
// 浅拷贝 方法二 : ...展开运算符号
// const subObj = { ...obj };
// 此时修改第一层属性不会互相影响
// subObj.age = 10;
// console.log(subObj);
// console.log(obj);
// 修改第二层属性会互相影响
// subObj.hobby.sing = '小红帽';
// console.log(subObj);
// console.log(obj);
// 浅拷贝的第二层引用还是同一个地址
// console.log(subObj.hobby === obj.hobby);//true
深拷贝
javascript">// 深拷贝 : 递归
const deepCopy = (obj) => {
if (typeof obj !== 'object') return
const newObj = {};
for (const key in obj) {
newObj[key] = obj[key];
if (typeof obj[key] === 'object') {
newObj[key] = deepCopy(obj[key]);
}
}
return newObj;
};
const newObj = deepCopy(obj);
newObj.hobby.sing = '小红帽';
obj.age = 10;
console.log(obj);
console.log(newObj);