深浅拷贝
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*/