深拷贝是拷贝内容,浅拷贝是拷贝地址
<script>
//封装精确的获取数据类型
function getType(source){
return Object.prototype.toString.call(source).slice(8,-1);
}
//封装一个深拷贝的函数
function deepCopy(source){//source 给一个资源数据,返回复制好的对象
//1.判断如果是数组,创建一个空数组,如果是对象,创建一个空对象,其他直接返回
if(getType(source)==="Object"){
var res={};
}else if(getType(source)==="Array"){
var res=[];
}else{return source;}
//2.循环赋值
for(var key in source){
if(getType(source[key])==="Array"||"Object"){//如果要复制的值还是一个数组,或者是一个对象,直接复制就还是一个浅拷贝,需要重新再走一遍deepCopy()函数
res[key]=deepCopy(source[key]);
}
res[key]=source[key];
}
return res;
}
</script>