当前位置:实例文章 » HTML/CSS实例» [文章]js浅拷贝与深拷贝

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 深拷贝]( />* [浅拷贝与深拷贝](

其他信息

其他资源

Top