深度克隆就是两对象间进行拷贝
深度克隆和浅度克隆的区别,深度克隆克隆后不管是引用数据类型,还是基本数据类型都是相互独立的,两个对象间互不影响。
深度克隆的思路:
1.遍历(for var prop in obj)
2.判断是原始值还是引用值,使用typeof()进行判断
3.如果是引用值,还需要继续判断是数组还是对象,判断方法instanceof、toString、constructor
4.建立相应的数组或对象
5.再利用递归
function deepclone(oldObj,newObj){
var newObj = newObj || {};
var toStr = Object.prototype.toString;
var strArr = "[Object Array]";
for(var prop in oldObj){//遍历对象
if(oldObj.hasOwnProperty(prop)){//判断是不是该对象自有的属性
if(oldObj[prop] !== null && typeof(oldObj[prop]) == 'Object'){//判断是不是引用类型
if(toStr.call(oldObj[prop]) == strArr){//判断是数组还是对象
newObj[prop] = [];
}
else{
newObj[prop] = {};
}
deepclone(oldObj[prop],newObj[prop])//递归
}else{
newObj[prop] = oldObj[prop];//原始数据直接赋值
}
}
}
return newObj;
}