深拷贝 vs 浅拷贝:JavaScript 对象复制详解
深拷贝和浅拷贝是 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。
选择使用深拷贝还是浅拷贝取决于你的具体需求。如果你需要修改复制出来的对象或数组而不影响原对象或数组,则应该使用深拷贝。如果你只需要一个对象的简单副本,则可以使用浅拷贝。
原文地址: https://www.cveoy.top/t/topic/oisv 著作权归作者所有。请勿转载和采集!