1.浅拷贝只是将引用类型的地址给赋值到新方法,所对应的还是同一个数组,改数组中的值时两个方法的值都会受到影响改变
var a = {
pd:20;
}
var b = a;
这种只能叫赋值,赋的是a的内存地址
深拷贝是创建了一个新数组,将旧数组的值复制进来,地址不 同,改变不会受影响
浅拷贝(shallowCopy): 重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会相互影响。
深拷贝(deepCopy)是从堆内存中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响。
常用深拷贝
Json.parse(Json.Stringfly)
注意点:判断typeof时类型首字母都为小写,所以是object
//深拷贝,用递归实现
function deepCopy(sd){
let map = Array.isArray(sd)?[]:{}//判断原数据是数组还是对象用来判断类型
if(typeof sd === 'object'){
for (const item in sd) {
map[item] = deepCopy(sd[item])//递归再次判断子类是简单还是复杂数据类型,每次调用创建新map
}
return map;//子类是复杂数据类型就遍历添加为一个对象返回
} else {
return sd;//不是引用数据类型直接返回
}
}