返回

复制JavaScript对象,快速get√这些方法

前端

在JavaScript中,复制对象是一项常见的操作。然而,JavaScript中的对象是引用类型,这意味着当您复制一个对象时,您实际上只是创建了对原始对象的引用,而不是创建了一个新的对象。这可能会导致意外的结果,例如,当您更改复制的对象时,原始对象也会随之改变。

为了避免这种情况,您需要创建一个对象的副本,而不是仅仅创建一个引用。在JavaScript中,有几种方法可以做到这一点。

浅拷贝与深拷贝

在复制对象时,您需要考虑是进行浅拷贝还是深拷贝。浅拷贝只复制对象本身的属性,而不复制其嵌套对象。深拷贝则复制对象本身的属性及其嵌套对象。

JSON方法

JSON方法是复制对象最简单的方法之一。它将对象转换为JSON字符串,然后将JSON字符串解析为一个新的对象。这种方法只进行浅拷贝。

const obj = {
  name: 'John Doe',
  age: 30
};

const copy = JSON.parse(JSON.stringify(obj));

console.log(copy); // { name: 'John Doe', age: 30 }

对象扩展运算符

对象扩展运算符(...)是复制对象另一种简单的方法。它将对象的所有属性复制到一个新的对象中。这种方法也只进行浅拷贝。

const obj = {
  name: 'John Doe',
  age: 30
};

const copy = { ...obj };

console.log(copy); // { name: 'John Doe', age: 30 }

克隆方法

一些对象具有克隆方法,该方法可以创建对象的副本。克隆方法通常进行深拷贝。

例如,数组对象具有slice()方法,该方法可以创建数组的副本。

const arr = [1, 2, 3];

const copy = arr.slice();

console.log(copy); // [1, 2, 3]

手动复制方法

您还可以使用手动复制方法来复制对象。这种方法涉及到创建新对象,然后将原始对象的所有属性复制到新对象中。这种方法可以进行浅拷贝或深拷贝,具体取决于您复制属性的方式。

例如,您可以使用for...in循环来复制对象的属性:

const obj = {
  name: 'John Doe',
  age: 30
};

const copy = {};

for (const key in obj) {
  copy[key] = obj[key];
}

console.log(copy); // { name: 'John Doe', age: 30 }

总结

在JavaScript中,复制对象有五种常见的方法:JSON方法、对象扩展运算符、克隆方法、手动复制方法和ES6的Object.assign()方法,每种方法都有各自的优缺点。

方法 复制类型 优缺点
JSON方法 浅拷贝 简单易用,但只支持JSON可序列化的对象
对象扩展运算符 浅拷贝 简单易用,但只支持JSON可序列化的对象
克隆方法 深拷贝 支持深拷贝,但只支持特定类型对象
手动复制方法 浅拷贝或深拷贝 灵活,但需要手动实现
Object.assign()方法 浅拷贝 简单易用,支持所有对象,但只支持浅拷贝