js浅拷贝与深拷贝
发布人:shili8
发布时间:2025-02-15 04:12
阅读次数:0
**浅拷贝与深拷贝**
在 JavaScript 中,对象的复制是非常重要的一部分。我们经常需要将一个对象的副本传递给其他函数或变量,以便不改变原始数据。然而,在 JavaScript 中,有两种不同的方式来实现这个目的:浅拷贝和深拷贝。
**浅拷贝**
浅拷贝是指创建一个新对象,并将原对象中的所有属性复制到新对象中。但是,如果原对象中的某个属性是引用类型(如数组或对象),那么在新对象中,这个属性仍然是对原对象的引用,而不是一个独立的副本。
javascriptfunction shallowCopy(obj) {
return { ...obj };
}
const original = { a:1, b: [2,3] };
const copy = shallowCopy(original);
console.log(copy); // { a:1, b: [2,3] }
copy.b.push(4);
console.log(original); // { a:1, b: [2,3,4] }
如上面的示例所示,浅拷贝并没有创建一个独立的数组副本,而是仍然引用了原对象中的数组。因此,当我们在新对象中修改这个数组时,也会影响到原对象。
**深拷贝**
深拷贝则不同,它会递归地复制所有属性,包括引用类型的属性,从而创建一个完全独立的副本。
javascriptfunction deepCopy(obj) {
if (typeof obj !== 'object') return obj;
const copy = Array.isArray(obj) ? [] : {};
for (const key in obj) {
copy[key] = deepCopy(obj[key]);
}
return copy;
}
const original = { a:1, b: [2,3], c: { d:4 } };
const copy = deepCopy(original);
console.log(copy); // { a:1, b: [2,3], c: { d:4 } }
copy.b.push(5);
copy.c.d++;
console.log(original); // { a:1, b: [2,3], c: { d:4 } }
如上面的示例所示,深拷贝创建了一个完全独立的副本,即使原对象中的某个属性是引用类型,也不会影响到原对象。
**总结**
在 JavaScript 中,浅拷贝和深拷贝都是实现对象复制的重要方法。浅拷贝只会复制原对象中所有属性的值,而不考虑这些值是否为引用类型;而深拷贝则会递归地复制所有属性,从而创建一个完全独立的副本。
**注意**
在实际开发中,需要根据具体场景选择合适的复制方法。浅拷贝通常用于简单对象的复制,而深拷贝则用于复杂对象或需要保持原对象完整性的情况下。
**参考**
* [JavaScript 深拷贝]( />* [浅拷贝与深拷贝](

