深拷贝和浅拷贝是 JavaScript 中复制对象或数组的两种不同方式。它们的区别在于,当复制对象或数组时,是否会同时复制对象或数组中嵌套的子对象或子数组。

浅拷贝只复制对象或数组本身,不会复制其中的子对象或子数组。因此,当修改复制出来的对象或数组中的子对象或子数组时,原对象或数组中的对应子对象或子数组也会被修改。

而深拷贝会递归地复制对象或数组中的所有子对象或子数组,因此,复制出来的对象或数组与原对象或数组完全独立,互不影响。

例如:

var obj = {
  'a': 1,
  'b': {
    'c': 2
  }
};

// 浅拷贝
var shallowCopy = Object.assign({}, obj);
shallowCopy.b.c = 3;

console.log(obj.b.c); // 3

// 深拷贝
var deepCopy = JSON.parse(JSON.stringify(obj));
deepCopy.b.c = 4;

console.log(obj.b.c); // 3

在上面的例子中,浅拷贝 shallowCopy 只复制了 obj 的顶层属性,而 obj.b 仍然指向同一个对象。因此,修改 shallowCopy.b.c 的值也会影响到 obj.b.c。而深拷贝 deepCopy 则创建了 obj 的一个完全独立的副本,因此修改 deepCopy.b.c 不会影响到 obj.b.c

选择使用深拷贝还是浅拷贝取决于你的具体需求。如果你需要修改复制出来的对象或数组而不影响原对象或数组,则应该使用深拷贝。如果你只需要一个对象的简单副本,则可以使用浅拷贝。

深拷贝 vs 浅拷贝:JavaScript 对象复制详解

原文地址: https://www.cveoy.top/t/topic/oisv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录