深拷贝和浅拷贝

深拷贝和浅拷贝是编程中用于复制对象或数组的两种不同方法。以下是它们的主要区别:

浅拷贝(Shallow Copy)

  • 复制方式 :浅拷贝仅复制对象的引用,不会复制对象本身的数据。

  • 效果 :复制后的对象和原对象指向同一块内存空间,修改一个对象会影响另一个对象。

  • 适用场景 :适用于对象中只有基本数据类型的情况。

  • 实现方式

  • 使用 Object.assign() 方法。

  • 使用数组的 slice()concat() 方法。

深拷贝(Deep Copy)

  • 复制方式 :深拷贝递归复制对象及其所有嵌套子对象的数据,生成一份完全独立的拷贝。

  • 效果 :复制后的对象和原对象是互相独立的,修改一个对象不会影响另一个对象。

  • 适用场景 :适用于对象中包含引用数据类型的情况。

  • 实现方式

  • 使用 JSON.stringify()JSON.parse() 方法(适用于可序列化的对象)。

  • 使用递归函数进行深度复制。

示例

// 浅拷贝示例
let obj1 = { a: 1, b: { c: 1 } };
let obj2 = Object.assign({}, obj1);
obj1.b.c = 2console.log(obj2.b.c); // 输出 2,因为浅拷贝共享了对象的引用

// 深拷贝示例
let obj1 = { a: 1, b: { c: 1 } };
let obj2 = JSON.parse(JSON.stringify(obj1));
obj1.b.c = 2console.log(obj2.b.c); // 输出 1,因为深拷贝创建了对象的独立副本

选择深拷贝还是浅拷贝取决于你的需求。如果你需要两个对象完全独立,那么应该使用深拷贝。如果你确定对象中不包含引用类型的数据,或者不介意对象之间共享数据,那么浅拷贝可能就足够了。需要注意的是,深拷贝通常比浅拷贝更消耗内存和处理时间

Top