浅拷贝和深拷贝的区别是什么?如何代码实现深拷贝?

  1. 浅拷贝(Shallow Copy):

    • 浅拷贝创建一个新对象,但是这个新对象的属性值是指向原始对象属性值的引用。
    • 对于对象属性是基本数据类型的,浅拷贝会复制其值。
    • 对于对象属性是对象(或数组)的,浅拷贝只复制引用,而不复制对象本身。
  2. 深拷贝(Deep Copy):

    • 深拷贝创建一个新对象,并且递归地复制所有子对象的属性。
    • 深拷贝确保原始对象和新对象之间没有任何引用关联,修改新对象不会影响原始对象。

如何实现深拷贝

使用 JSON.parse(JSON.stringify(obj)) 有局限性 很多类型不支持


const original = {
  a: 1,
  b: [1, 2, 3],
  c: { d: 4 },
  e: new Date(),
  f: /a/gi,
  g: new Set([1, 2, 3]),
  h: new Map([['a', 1], ['b', 2]]),
  i: new Error('error'),
  j: null,
  k: undefined,
  l: BigInt(1)
};

const deepCopied = JSON.parse(JSON.stringify(original));

使用  structuredClone(obj)

const deepCopieds = structuredClone(original);
// 测试
original.b.push(4);
original.c.d = 5;

  console.log("Original:", original);
  console.log("deepCopied:",deepCopied);
  console.log("deepCopieds:", deepCopieds);

 

posted @ 2024-09-10 20:55  雨下大了没  阅读(4)  评论(0编辑  收藏  举报