1.浅拷贝只是将引用类型的地址给赋值到新方法,所对应的还是同一个数组,改数组中的值时两个方法的值都会受到影响改变

    1. var a = {
    2. pd:20;
    3. }
    4. var b = a;
    5. 这种只能叫赋值,赋的是a的内存地址

    深拷贝是创建了一个新数组,将旧数组的值复制进来,地址不 同,改变不会受影响
    浅拷贝(shallowCopy): 重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会相互影响。
    深拷贝(deepCopy)是从堆内存中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响。
    常用深拷贝
    Json.parse(Json.Stringfly)
    注意点:判断typeof时类型首字母都为小写,所以是object

    1. //深拷贝,用递归实现
    2. function deepCopy(sd){
    3. let map = Array.isArray(sd)?[]:{}//判断原数据是数组还是对象用来判断类型
    4. if(typeof sd === 'object'){
    5. for (const item in sd) {
    6. map[item] = deepCopy(sd[item])//递归再次判断子类是简单还是复杂数据类型,每次调用创建新map
    7. }
    8. return map;//子类是复杂数据类型就遍历添加为一个对象返回
    9. } else {
    10. return sd;//不是引用数据类型直接返回
    11. }
    12. }