我们都知道对象分为深度克隆和浅度克隆,深度克隆是把属性和值全部都克隆成为另一个整体,而浅度克隆只是克隆对象的引用地址,引用地址还是相同的,不会发生变化。例如
对象的浅克隆
let obj={
name:'ligo',
age:18
}
let obj2=Object.assign(obj)
obj2.work='study'
console.log(obj,obj2) //obj {age: 18,name: "ligo",work: "study"} obj2{age:18,name: "ligo",work: "study"}
console.log(obj===obj2) //true
对象的深度克隆
function deepClone(target) {
//判断类型是否为obj
let result;
if (typeof target === 'object') {
//判断是否为数组
if (Array.isArray(target)) {
result = []
for (let key in target) {
result =result.push( deepClone(target[key]))
}
} else {
result = {}
for (let key in target) {
result[key] = deepClone(target[key])
}
}
} else {
result = target
}
return result
}
let obj = {
name: 'ligo',
age: '18'
}
let obj2 = deepClone(obj)
obj2.work='study'
console.log(obj2,obj) //obj {age: 18,name: "ligo"} obj2{age: 18,name: "ligo",work: "study"}
console.log(obj2===obj) //false
在深度克隆中,被克隆的obj属性的改变不会影响obj,因为obj2和obj的引用不是同一个,相当于是一个独立的整体。而浅度克隆obj2的改变会影响到obj