什么是深拷贝,浅拷贝
深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。
1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象只是对原对象的一个引用
2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”
那么怎么实现一个深拷贝呢?
实现思路:
- 检查类型,判断类型是否为引用类型,是就进行深拷贝,否则浅拷贝
- 使用递归
- 检查环,判断当前引用是否指向自身,避免进入死循环
- 需要忽略原型
function deepClone(obj){
// 判断当前对象是对象还是数组
let result = Array.isArray(obj)?[]:{};
if(obj && typeof obj === "object"){
for(let key in obj){
// 判断是否为自身属性
if(obj.hasOwnProperty(key)){
if(obj[key] && typeof obj[key] === "object"){
//子元素为对象,进入递归
result[key] = deepClone(obj[key]);
}else{
result[key] = obj[key];
}
}
}
}
return result;
}