You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var deepclone= function(obj){
if (typeof obj!==="object"){
return obj;
}else{
var newObj=obj.constructor===Array?[]:{};
if (winodw.JSON){
newObj=JSON.parse(JSON.stringify(obj));
}else{
for(var i in obj){
newObj[i]=arguments.callee(obj[i]);
}
}
return newObj;
}
}
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
浅复制
浅复制只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅复制会导致新旧对象还是共享同一块内存。
浅复制:
注意:当object只有一层的时候,是深拷贝,例如如下:
深复制
深复制不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上。
方法:
var newObj = JSON.parse(JSON.stringify(obj));
$.extend
_.cloneDeep
深拷贝对象和数组的方法
参考资料
The text was updated successfully, but these errors were encountered: