// 深拷贝完善方法,拷贝数组,对象,循环引用functioncheckedType(target){return Object.prototype.toString.call(target).slice(8,-1);//返回检测的数据类型}functionclone(target){//判断拷贝的数据类型//初始化变量result 成为最终克隆的数据let result,targetType=checkedType(target);if(targetType ==='Object'){
result ={}}elseif(targetType ==='Array'){
result =[]}else{return target;}//遍历目标数据for(let i in target){//获取遍历数据结构的每一项值let value = target[i];//判断目标结构里的每一项值是否存在对象/数组if(checkedType(value)==='Object'||checkedType(value)==='Array'){//继续遍历获取到的value值
result[i]=clone(value);}else{//获取到的value值是基本的数据类型或者是函数
result[i]=value;}}return result;}