对象的深浅拷贝

浅拷贝

//首先声明一个对象 
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) 无法拷贝。

先列举两个我觉得最简单的拷贝方法吧,还有函数深拷贝后续补充

你可能感兴趣的:(对象的深浅拷贝)