返回

彻底讲清楚浅拷贝与深拷贝

前端

浅拷贝和深拷贝的区别

  • 浅拷贝只复制对象的引用,而深拷贝会复制对象及其所有的属性,包括嵌套的对象。
  • 浅拷贝只占用一个内存空间,而深拷贝会占用多个内存空间。
  • 浅拷贝不会递归复制对象的属性,而深拷贝会递归复制对象的属性。

浅拷贝的实现

// 浅拷贝
const object1 = {
  name: 'John',
  age: 30,
  address: {
    city: 'New York',
    state: 'New York',
  },
};

const object2 = Object.assign({}, object1);

// 修改object2的属性
object2.name = 'Jane';
object2.address.city = 'Los Angeles';

// 打印object1和object2
console.log(object1); // { name: 'John', age: 30, address: { city: 'Los Angeles', state: 'New York' } }
console.log(object2); // { name: 'Jane', age: 30, address: { city: 'Los Angeles', state: 'New York' } }

深拷贝的实现

// 深拷贝
const object1 = {
  name: 'John',
  age: 30,
  address: {
    city: 'New York',
    state: 'New York',
  },
};

const object2 = JSON.parse(JSON.stringify(object1));

// 修改object2的属性
object2.name = 'Jane';
object2.address.city = 'Los Angeles';

// 打印object1和object2
console.log(object1); // { name: 'John', age: 30, address: { city: 'New York', state: 'New York' } }
console.log(object2); // { name: 'Jane', age: 30, address: { city: 'Los Angeles', state: 'New York' } }

浅拷贝和深拷贝的使用场景

  • 浅拷贝通常用于复制基本数据类型和简单的对象,而深拷贝通常用于复制复杂的对象,如包含数组或其他对象的嵌套对象。
  • 浅拷贝的效率更高,因为只需要复制一次引用,而深拷贝的效率较低,因为需要递归复制所有的属性。
  • 浅拷贝可以用来共享对象,而深拷贝可以用来隔离对象。

结论

浅拷贝和深拷贝都是有用的数据复制方法,它们在不同的场景下都有各自的用途。理解浅拷贝和深拷贝的区别对于编写高效和健壮的代码非常重要。