淺拷貝
//首先聲明一個對象
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) 無法拷貝。
先列舉兩個我覺得最簡單的拷貝方法吧,還有函數深拷貝后續補充