浅克隆的弊端, 拷贝的是基本类型, 当遇到引用类型时,拷贝的是该值的引用,
-
JSON.stringify() JSON.parse() 可以实现深拷贝 ,但有两个缺点:
1. 如果对象里面有函数, 函数就无法被拷贝出来 2. 无法拷贝目标对象原型链上的属性和方法
深拷贝 在遇到引用类型时 不是复制它的索引,而是重新开辟一个空间 用来保存它的值 , 这样就不会影响源数据了
1. 检测数据类型
function checkType(value) {
return Object.prototype.toString.call(value).slice(8, -1);
}
2.实现深拷贝
function deepCopy(args) {
let result;
if (checkType(args) !== ("Object" || 'Array')) {
result = args
} else {
checkType(args) === "Object" && (result = {});
checkType(args) === "Array" && (result = []);
for (let i in args) {
result[i] = deepCopy(args[i]);
}
}
return result
}