浅拷贝
//首先声明一个对象
const obj = {
a: '123',
b: {
name: 'obj'
}
}
const objAAA = Object.assign({}, obj);
objAAA.a = 'AAA';
objAAA.b.name = "objAAA"
const objBBB = Object.assign({}, obj);
objBBB.a = 'BBB';
objBBB.b.name = "objBBB"
console.log(objAAA);
// const obj = {
// a: 'AAA',
// b: {
// name: 'objBBB'
// }
// }
console.log(objBBB);
// const obj = {
// a: 'BBB',
// b: {
// name: 'objBBB'
// }
// }
//结论: b.name 内容相等,说明Object.assign无法拷贝深层次内容,适用于浅层拷贝。
深拷贝
//首先声明一个对象
const obj = {
a: '123',
b: {
name: 'obj'
}
}
const objAAA = JSON.parse(JSON.stringify(obj));
objAAA.a = 'AAA';
objAAA.b.name = "objAAA"
const objBBB = JSON.parse(JSON.stringify(obj));
objBBB.a = 'BBB';
objBBB.b.name = "objBBB"
console.log(objAAA);
// const obj = {
// a: 'AAA',
// b: {
// name: 'objAAA'
// }
// }
console.log(objBBB);
// const obj = {
// a: 'BBB',
// b: {
// name: 'objBBB'
// }
// }
//将源对象转换为字符串,再转换为新对象解决了深层次拷贝的问题,但对象中的 (Function 和 undefined) 无法拷贝。
先列举两个我觉得最简单的拷贝方法吧,还有函数深拷贝后续补充