手写深拷贝
let obj = {
name: "zhangsan",
age: "12",
address: {
city: :"shanghai"
},
ary: [1,2,3,4]
}
//普通拷贝
//let obj2 = obj;
//obj2.name = "lisi"
//obj1的值也跟随修改了
//深拷贝
let obj2 = shenCopy(obj);
obj2.name = "lisi"
//再次打印obj1结果并未受到影响
function shenCopy(data = {}){
//判断数据是否为object类型 如果不是 则为值拷贝 可直接赋值
if(typeof data !== "object" || data == null){
return data;
}
let result;
if(data instanceof array){
result = [];
}else{
result = {};
}
for(let key in data){
// hasOwnProperty是判断obj中是否具有item键 比如 item是name 就是判断obj中是否有name属性
if(data.hasOwnProperty(key)){
// 递归赋值
result[key] = shenCopy(data[key])
}
}
return result
}
注意知识点 首先就是递归其次就是判断 instanceof 和hasOwnProperty