深拷贝

//基础数据类型变量和值都存储在栈中,引用数据类型变量存储在栈中,值存储在堆中
//引用数据类型浅拷贝是存储地址没有发生改变,指向的是同一个堆,深拷贝是新开辟了一个堆。
// 判断深拷贝还是浅拷贝,假设B复制了A,A发生了变化,B也随之发生改变,就是浅拷贝;若B没变,则是深拷贝
let obj = {
            name: "jine",
            sex: "男",
            car: ["奔驰", "宝马", "奥迪"],
            dog: {
                name: "大黄",
                age: 3,
                color: "yellow"
            }
        }

  let copyobj = {};
        function extend(a, b) {
            //  分三种情况
            for (let key in a) {
                // 1.如果是数组
                if (a[key] instanceof Array) {
                    b[key] = [];
                    extend(a[key], b[key]);
                }
                // 2.如果是对象
                else if (a[key] instanceof Object) {
                    b[key] = {};
                    extend(a[key], b[key]);
                }
                // 3.如果是字符串/数字
                else {
                    b[key] = a[key];
                }
            }
        }

       extend(obj, copyobj)
        obj.car.pop();
        console.log(obj);
        console.log(copyobj);
posted @ 2021-08-17 16:34  yongerbingxuan  阅读(33)  评论(0)    收藏  举报