深浅拷贝

深浅拷贝

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*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章