深淺拷貝

深淺拷貝

javascript中的數據類型

  1. 基本類型:undefined,null,Boolean,Number,String,Symbol
    保存在棧中,不可改變,複製時是創建副本給變量
  2. 引用類型: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*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章