在JavaScript中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种用于复制数组或对象的常用方法。它们的区别在于复制复杂对象时如何处理对象内部的属性。
- 浅拷贝(Shallow Copy):
浅拷贝只复制对象的引用,而不是实际的对象。这意味着如果你修改了复制的对象,原始对象也会受到影响。在JavaScript中,可以使用Object.assign()方法实现浅拷贝。
例如:
let originalObject = { a: 1, b: 2 };
let copiedObject = Object.assign({}, originalObject);
copiedObject.a = 3;
console.log(originalObject.a); // 输出 1,原始对象不受影响
console.log(copiedObject.a); // 输出 3,复制对象被修改
- 深拷贝(Deep Copy):
深拷贝不仅复制对象的引用,还会复制对象内部的属性和值。这意味着修改复制的对象不会影响原始对象。在JavaScript中,可以使用JSON对象实现深拷贝。
例如:
let originalObject = { a: 1, b: 2, c: { d: 3 } };
let copiedObject = JSON.parse(JSON.stringify(originalObject));
copiedObject.a = 4;
copiedObject.c.d = 5;
console.log(originalObject.a); // 输出 1,原始对象不受影响
console.log(originalObject.c.d); // 输出 3,原始对象不受影响
console.log(copiedObject.a); // 输出 4,复制对象被修改
console.log(copiedObject.c.d); // 输出 5,复制对象被修改
请注意,使用深拷贝方法时要注意处理复杂对象内部的循环引用问题,以避免出现无限递归或性能问题。
@漏刻有时