浅拷贝与深拷贝随笔记录

1.浅拷贝

let obj1 = {

        name: '张三',

        age: 18,

        like: [1,[1,2]]

    }

方式一:

 function shallowCopy (obj) {

        let newObj = {}

        if (typeof obj !== 'object') {//不是对象 直接返回

            return

        }

        for (let key in obj) {

            newObj[key] = obj[key]

        }

        return newObj

    }

 let obj2 = obj1 //不是浅拷贝

 let obj2 = shallowCopy(obj1)

方式二:

let obj2 = Object.assign({},obj1)

2.深拷贝

方法一:

function deepCopy (obj) {

        let objClone = Array.isArray(obj)?[]:{};//判断传入的类型

        if(obj && typeof obj==="object"){

            for(key in obj){

                if(obj.hasOwnProperty(key)){

                    //判断ojb子元素是否为对象,如果是,递归复制

                    if(obj[key]&&typeof obj[key] ==="object"){

                        objClone[key] = deepCopy(obj[key]);

                    }else{

                        //如果不是,简单复制

                        objClone[key] = obj[key];

                    }

                }

            }

        }

        return objClone

    }

let obj2 = deepCopy(obj1)

方法二:

JSON.stringify()

JSON.parse()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。