浅拷贝:(shallowCopy)只是增加了一个指针指向已存在的内存地址。
(例如:同一个地址其中一个改变,另一个也会被改变)
深拷贝:deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。
(例如:同一个地址,申请加入一个新的地址,并且改变了地址方向,所有其中一个改变另一个也地址不会被改变)

区别:
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。

浅拷贝实现:
var a = [1, 2, 3, 4, 5];
var b = a;
a[0] = 2
console.log(a);
console.log(b);

//因为b浅拷贝a, ab指向同一个内存地址(堆内存中存的值)
//b会随着a的变化而变化
//[2, 2, 3, 4, 5]
//[2, 2, 3, 4, 5]

深拷贝实现:

function deepClone(obj){
var newObj = obj instanceof Array ? []:{};
if(typeof obj !== 'object'){
return obj;
}else{
for(var i in obj){
newObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i];
}
}
return newObj;
} 
var a = [1, 2, 4, 6, "a", "12", [1, 2]];var b = deepClone(a);a[3] 7;
console.log(a);console.log(b);

//b对象并没有因为a对象的改变而改变,因为b深拷贝a
[ 1, 2, 4, 7, ‘a’, ‘12’, [ 1, 2 ] ]
[ 1, 2, 4, 6, ‘a’, ‘12’, [ 1, 2 ] ]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐