> 知识
深浅克隆的方法有几种(什么是深克隆和浅克隆)
导语:深浅克隆的方法?
浅克隆:只复制对象的引用,而不是对象本身。当对象的属性值发生改变时,克隆出来的对象也会发生改变。
深克隆:复制对象本身,而不是对象的引用。当对象的属性值发生改变时,克隆出来的对象不会发生改变。可以使用JSON.parse(JSON.stringify(obj))或递归实现深克隆。
1:浅克隆
// 浅克隆let obj1 = {a: 1, b: {c: 2}};let obj2 = Object.assign({}, obj1);console.log(obj2); // {a: 1, b: {c: 2}}obj1.b.c = 3;console.log(obj2); // {a: 1, b: {c: 3}}
2:深克隆 使用JSON.parse(JSON.stringify(obj))
// 深克隆// 方法一:使用JSON.parse(JSON.stringify(obj))let obj3 = {a: 1, b: {c: 2}};let obj4 = JSON.parse(JSON.stringify(obj3));console.log(obj4); // {a: 1, b: {c: 2}}obj3.b.c = 3;console.log(obj4); // {a: 1, b: {c: 2}}
3:递归实现深克隆
// 方法二:递归实现深克隆function deepClone(obj) { if (typeof obj !== &39; || obj === null) { return obj; } let result = Array.isArray(obj) ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { result[key] = deepClone(obj[key]); } } return result;}let obj5 = {a: 1, b: {c: 2}};let obj6 = deepClone(obj5);console.log(obj6); // {a: 1, b: {c: 2}}obj5.b.c = 3;console.log(obj6); // {a: 1, b: {c: 2}}
本文内容由小媛整理编辑!