1.先获取数据的类型
data: 需要实现深拷贝的数据
function getType(data) {
对象的原型转成字符串再指向当前对象截取指定长度
return Object.prototype.toString.call(data).slice(8, -1);
};
var a= getType([1,2,3])
conlse.log(a) // Array
2.实现递归拷贝
判断当前的的数据类型是什么 如果是Object 就建立一个{} 如果是Array就建立一个[]
都不是就return 返回传进来的数据
function deepClone(data) {
if(getType(data) == 'Object'){
var res = {};
} else if(getType(data) == 'Array'){
var res = [];
} else {
return data;
}
将data数据中的每一个属性名和属性值存储到res中 用for in遍历
for(var key in data){
判断要存储的是否是Array或者Object 如果是 调用deepClone 自己的函数
if(getType(data[key]) == 'Object' || getType(data[key]) == 'Array'){
res[key] = deepClone(data[key]);
} else {
res[key] = data[key];
}
}
设置返回值
return res;
}
var r = deepClone(obj)
console.log(r == obj); // false