深拷貝和淺拷貝都是用於對復雜數據類型進行復制。
差異:
其區別在於深拷貝是對原數據進行遞歸復制,並存到壹個新地址,從而使新老數據互不影響。
而淺拷貝只是對原數據的地址進行拷貝,從而會使新老數據相互影響。
常用實現方法:
深拷貝:
1.遞歸復制(全部適用)
function duplicate(obj) {
var newObj = null;
If(obj !== null && typeof(obj)==obj){
newObj=Obj instanceof Array?[]:{};
For (var i in obj){
newObj[i] = duplicate[i];
}
}else{
newObj = obj;
}
return newObj;
}
2.JSON.stringify(obj);
關於這個方法有壹個缺點就是 不能拷貝function和undefine( 在火狐上直接報錯error,而在谷歌上會直接忽略掉相關屬性) 。因為這是通過把數據轉化為字符串的形式賦值給壹個新地址。
淺拷貝:
1.函數實現
function simpleDuplicate(obj){
Var newObj ={};
for(var I in obj){
If(obj.hasOwnProperity[i]){
newObj[i] = obj[i];
}
}
return newObj;
}
2.各種賦值、合並刪除操作。