返回

JavaScript轻松了解对象浅拷贝和深拷贝

前端

在研究如何进行JavaScript对象拷贝之前,我们有必要先了解JavaScript中的数据类型。基本数据类型是指按值访问,且不可改变的数据。常见的基本数据类型包括数字、字符串和布尔值等。另一方面,对象数据类型则是通过引用访问,且可改变的数据。常见的对象数据类型包括对象和数组等。

我们通常所说的对象拷贝,本质上是对原始数据的拷贝。原始数据是指基本数据类型和对象数据类型。那么,原始数据的拷贝方式有哪几种呢?我们知道,在JavaScript中,对象拷贝主要分为浅拷贝和深拷贝。

浅拷贝只拷贝对象的第一层,而深拷贝则会拷贝对象的所有层级。也就是说,当我们进行浅拷贝时,我们只拷贝对象本身的属性,而不会拷贝对象内部的属性。而当我们进行深拷贝时,我们不仅会拷贝对象本身的属性,还会拷贝对象内部的属性,甚至会拷贝对象内部的属性的属性,依此类推。

JavaScript对象拷贝的实现方式

浅拷贝:

const obj1 = {
  name: 'John',
  age: 30,
  address: {
    street: 'Main Street',
    city: 'New York',
    state: 'NY',
  },
};

const obj2 = Object.assign({}, obj1);

深拷贝:

const obj1 = {
  name: 'John',
  age: 30,
  address: {
    street: 'Main Street',
    city: 'New York',
    state: 'NY',
  },
};

const obj2 = JSON.parse(JSON.stringify(obj1));

JavaScript对象拷贝的应用场景

浅拷贝常用于一些不需要修改原始数据的情况,例如:

  • 当我们需要创建一个对象的副本,以便在不影响原始数据的情况下对其进行修改时。
  • 当我们需要将一个对象传递给一个函数,而又不希望函数修改原始数据时。

深拷贝常用于一些需要修改原始数据的情况,例如:

  • 当我们需要创建一个对象的副本,以便对副本进行修改,而又不影响原始数据时。
  • 当我们需要将一个对象存储到数据库中,以便在以后能够恢复该对象时。

总结

在JavaScript中,对象拷贝主要分为浅拷贝和深拷贝。浅拷贝只拷贝对象的第一层,而深拷贝则会拷贝对象的所有层级。浅拷贝常用于一些不需要修改原始数据的情况,而深拷贝常用于一些需要修改原始数据的情况。