深淺拷貝
javascript中的數據類型
- 基本類型:undefined,null,Boolean,Number,String,Symbol
保存在棧中,不可改變,複製時是創建副本給變量 - 引用類型:Object,Array,Function,Date,RegExp
保存在堆中,棧中保存的是指向其堆中存儲空間的指針,複製時在棧中創建新的空間複製指針的值
賦值、深淺拷貝
賦值:和原數據指向同一對象,和原數據一同改變
淺拷貝:創建了新的對象,新對象中的基本類型數據改變不會影響原對象,引用類型數據改變會影響原對象
引用類型複製時複製的是指針
深拷貝:創建了新的對象,新對象改變不會影響原對象
對引用類型進行遞歸複製
深拷貝的實現
/*deep:是否深拷貝
target:拷貝目標,新對象
old:被拷貝的對象*/
function DeepClone(deep,target,old){
for(key in old){
if(deep&&($.isPlainObject(old[key])||Array.isArray(old[key]))){
target[key]=$.isPlainObject(old[key])?{}:[];
target[key]=DeepClone(true,target[key],old[key]);
}else{
target[key]=old[key];
}
}
return target;
}
/*這個方法只對子對象爲Object和Array適用,沒有處理Function*/