深拷贝:a对象是b对象的深拷贝,那么a对象中所有属性值为对象的引用地址均为不同于b中同属性的地址(其实就是改变a的时候b不跟着改变,a就是b的深拷贝)
浅拷贝:只复制指针,指针引用地址为同一个,改变一个对象,另一个跟着改变
代码:
function deepClone(obj){
let cloneObj=null //深拷贝之后的对象
if(obj && typeof(obj)!="object"){ //如果不是对象
return obj
}
cloneObj=Array.isArray(obj)?[]:{} //判断是对象还是数组
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof (obj[key]) == "object") { //判断对象的属性是不是object
cloneObj[key] = deepClone(obj[key])//mark1
} else {
cloneObj[key] = obj[key]//mark2
}
}
}
return cloneObj
}
解释:
mark1:如果被克隆对象的属性值为object,给该属性值进行递归。
mark2:初次遍历或者递归对象属性值(递归对象对象属性值即属性值为object的属性)之后的赋值