深拷贝与浅拷贝的区别:例如B复制了A,如果A改变了,B也跟着改变,则是浅拷贝;如果A改变了,B没有改变,则是深拷贝。
深拷贝会拷贝所有层级的属性
(1).JSON.stringfy和JSON.parse来回转换一次可以实现深拷贝;
代码示例:
let a = [1,2,3,[4,5],6]; //多层数组
let A = JSON.stringify(a); //JSON.stringify转换
let b = JSON.parse(A); //JSON.parse转换
console.log(a,b)
a[0] = 2;
console.log(a,b);
输入结果如图1,图2;
图1 图2由此可见此次拷贝为深拷贝
(2).使用递归循环来为数组赋值也可实现深拷贝
let a = [1,2,3,4,5,[6,7],8,9];
function deepClone(obj){
let b = Array.isArray(obj)?[]:{}; //判断传入数据的格式是否为array
for(key in obj){ //遍历数组
if(obj[key] && typeof obj[key] === "object"){ //如果该索引下存在数据切类型为object,再次调用改函数来循环内部的数组
b[key] = deepClone(obj[key]);
}else{
b[key] = obj[key] //其他情况下为新数组赋值
}
}
return b; //返回递归完成的数据
}
let b = deepClone(a);
console.log(a,b);
a[0] = 2;
a[5][0] = 1;
console.log(a,b);
输出结果如图3,图4;
图3 图4由此可见,递归之后所得的数据为深拷贝。
网友评论