概念:拷贝就是复制的意思深拷贝就是完全在另一个地址空间复制当前的值,而浅拷贝就是只复制指向复杂数据类型的指针,并没有创建一个新的地址空间
转换方法1 用JSON下的方法(缺点是不能克隆其中的函数):
let deepClone = function (obj) {
let result = JSON.parse( JSON.stringify(obj););
//先将对象转换为json字符串形式
//将转换而来的字符串转换为原生js对象
};
转换方法2 用递归实现:
function deepClone(obj = {}){
if(typeof obj !=='object' || obj ==null){
// obj 是null,或者不是对象和数据,直接返回
return obj
}
//
let result
if(obj instanceof Array){
result = []
}else{
result = {}
}
for(let key in obj){
// 保证key不是原型的属性
if(obj.hasOwnProperty(key)){
result[key] = deepClone(obj[key])
}
}
return result
}