推荐答案
在 JavaScript 中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同的对象复制方式。
浅拷贝(Shallow Copy):创建一个新对象,并将原始对象的属性值复制到新对象中。如果属性值是基本类型(如字符串、数字、布尔值等),则复制的是值本身;如果属性值是引用类型(如对象、数组等),则复制的是引用(即内存地址),因此新对象和原始对象会共享这些引用类型的属性。
深拷贝(Deep Copy):创建一个新对象,并递归地复制原始对象的所有属性值,包括嵌套的对象和数组。深拷贝会创建一个完全独立的对象,新对象和原始对象不会共享任何引用类型的属性。
本题详细解读
浅拷贝的实现方式
使用
Object.assign()
:const original = { a: 1, b: { c: 2 } }; const shallowCopy = Object.assign({}, original);
使用展开运算符
...
:const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original };
深拷贝的实现方式
使用
JSON.parse(JSON.stringify())
:const original = { a: 1, b: { c: 2 } }; const deepCopy = JSON.parse(JSON.stringify(original));
注意:这种方法无法复制函数、
undefined
、Symbol
等特殊类型。使用递归函数:
-- -------------------- ---- ------- -------- -------------- - -- ---- --- ---- -- ------ --- --- --------- - ------ ---- - ----- ----- - ------------------ - -- - --- --- ---- --- -- ---- - -- ------------------------- - ---------- - -------------------- - - ------ ------ - ----- -------- - - -- -- -- - -- - - -- ----- -------- - --------------------
浅拷贝与深拷贝的区别
- 浅拷贝:只复制对象的第一层属性,嵌套的对象或数组仍然是共享的。
- 深拷贝:递归地复制对象的所有层级,创建一个完全独立的对象。
使用场景
- 浅拷贝:适用于对象结构简单,且不需要独立嵌套对象的情况。
- 深拷贝:适用于对象结构复杂,且需要完全独立的对象副本的情况。
注意事项
- 深拷贝可能会带来性能问题,特别是在处理大型对象或嵌套层级很深的对象时。
- 深拷贝可能会丢失一些特殊类型的数据(如函数、
undefined
、Symbol
等),需要根据具体需求选择合适的深拷贝方法。