一、深拷贝和浅拷贝


  一、浅拷贝

  1、浅拷贝:浅拷贝的只是拷贝第一层,拷贝的类型分二种,一种是基础数据类型,那么这样直接拷贝,且修改后不会影响另外一个。另外一种拷贝的是一个对象或者数组等,那只是拷贝它的引用(地址),意味着如果被被拷贝/拷贝对象修改了一个对象的属性或者数组中的值,那么会影响到另外一个对象,这种现象称为浅拷贝。

  附代码

     let obj = {
            id :1,
            name:'YZengXin',
            msg:{
                age:18
            }
        }
        let o = {};
        for (const key in obj) {
            o[key] = obj[key];
        }

  2、深拷贝:拷贝多层,每一层的数据都拷贝,但是和浅拷贝不同,深拷贝拷贝多层对象不是拷贝一个引用,而是基本类型,也就是说改了其中一个属性不会影响到另外一个

 function deepCopy(newObj,oldObj)
        {
            if(newObj == null){
                newObj = {};
            }

            for (const key in oldObj) {
                let item = oldObj[key];
                if(item instanceof Array){
                    newObj[key] = {};
                    deepCopy(newObj[key],item);
                }else if(item instanceof Object){
                    newObj[key] = {};
                    deepCopy(newObj[key],item);
                }else{
                    newObj[key]  = item;
                }

            }

        }
        deepCopy(o,obj);