1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在 JavaScript 中常用的两种对象复制方法, 它们之间有着不同的特点和应用场景。
1-浅拷贝(Shallow Copy): 1.1-浅拷贝是指只复制对象的一层属性,如果属性是基本类型,则直接复制其值; 如果属性是引用类型,则复制其引用,即两个对象会共享同一个引用类型的属性。 1.2-常见的浅拷贝方法包括 Object.assign()、扩展运算符 ...、Array.prototype.slice() 等。 1.3-浅拷贝只复制对象的一层结构,如果对象内部还有嵌套的对象,则嵌套对象仍然会被共享。
let obj1 = { a: 1, b: { c: 2 }}; let obj2 = Object.assign({}, obj1); obj2.b.c = 3;
console.log(obj1.b.c); // 输出 3,因为 obj1 和 obj2 共享了嵌套对象 b
2-深拷贝(Deep Copy): 2.1-深拷贝是指完全复制对象的所有层级,包括对象的所有属性和属性的属性, 从而创建一个新的对象,新对象和原对象完全独立,互不影响。 2.2-实现深拷贝的方法较为复杂,通常需要递归地遍历对象的所有属性,并逐一复制。 2.3-常见的实现深拷贝的方法包括递归复制、JSON 序列化与反序列化、 使用第三方库(如 lodash 的 _.cloneDeep() 方法)等。
let obj1 = { a: 1, b: { c: 2 }}; let obj2 = JSON.parse(JSON.stringify(obj1)); obj2.b.c = 3;
console.log(obj1.b.c); // 输出 2,因为 obj1 和 obj2 没有共享嵌套对象 b 总的来说,浅拷贝只复制对象的一层结构,而深拷贝则完全复制了对象的所有层级。 在选择使用深拷贝还是浅拷贝时,需要根据具体的应用场景和需求来决定。
|