深拷贝浅拷贝

137 阅读1分钟

深拷贝浅拷贝区别

  • 修改拷贝的数据会影响原数据--浅拷贝
  • 不会影响原数据--深拷贝

Object.assign()的用法

let obj={a:1};
let copyObj=Object.assign({},obj); // assign一个空对象
console.log(copyObj); // {a:1}
let obj={a:1};
let obj1={a:2,b:3};
let obj2=Object.assign(obj1,obj);
console.log(obj2); // {a: 1, b: 3}

为什么说Object.assign()是浅拷贝呢?

function test() {
  let a = { b: {c:4} , d: { e: {f:1}} }
  let g = Object.assign({},a) // 浅拷贝
  let h = JSON.parse(JSON.stringify(a)); // 深拷贝
  console.log(g.d) // { e: { f: 1 } }
  g.d.e = 32
  console.log('g.d.e set to 32.') // g.d.e set to 32.
  console.log(g) // { b: { c: 4 }, d: { e: 32 } }
  console.log(a) // { b: { c: 4 }, d: { e: 32 } }
  console.log(h) // { b: { c: 4 }, d: { e: { f: 1 } } }
  h.d.e = 54
  console.log('h.d.e set to 54.') // h.d.e set to 54.
  console.log(g) // { b: { c: 4 }, d: { e: 32 } }
  console.log(a) // { b: { c: 4 }, d: { e: 32 } }
  console.log(h) // { b: { c: 4 }, d: { e: 54 } }
}
test();