JS深拷贝与浅拷贝
在面试的时候,有遇到过深浅拷贝的问题,但是在实际的项目中也是会应用到深浅拷贝的,下面咱们就一起来看一下
如何区分深浅拷贝呢?
简单来说就是 B复制A,当操作A 的时候,观察B是否也会改变,如果B也跟着变了,那就是浅拷贝,如果B没有改变,那就是深拷贝。
浅拷贝
所谓浅拷贝,我们来看个例子
let a=[0,1,2,3,4],
b=a;
console.log(a===b);
a[0]=6;
console.log(a,b);
实践证明,当修改a的值,b的值也跟着改变了。
深拷贝
所谓深拷贝,就是我们修改A的值B的值不会改变,我们来实现一个深拷贝代码
function deepClone(obj){
let newObj= Array.isArray(obj) ? [] : {};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
newObj[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
newObj[key] = obj[key];
}
}
}
}
return newObj;
}
let a=[1,2,3,4],
b=deepClone(a);
a[0]=6;
console.log(a,b);
此结果说明,a修改不会影响到b
此文只是记录一下自己对深浅拷贝的理解,后期理解深刻会再度更新,加油!