Skip to content

对象或数组的深浅拷贝

01.深浅拷贝的概念

javascript
深浅拷贝指的是对一个对象的或者数组的一种复制方式。

02.深拷贝的自定义写法

  • 足以解决大部分的拷贝问题
javascript
// 利用递归的形式进行深拷贝
function deepClone(oldValue) {
    // 01.首先要判断这个传入进来的实参是不是一个对象类型的,并且该值不允许是null
    if (typeof oldValue === "object" && oldValue != "null") {
        // 02.判断传入的实参是不是一个数组,如果是数组就赋值给一个新数组,如果不是数组就是对象
        let res = Array.isArray(oldValue) ? [] : {};
        for (let key in oldValue) {
            // 监测这个对象上有没有指定的属性
            if (oldValue.hasOwnProperty(key)) res[key] = deepClone(oldValue[key]);
        }
        return res;
    } else {
        return oldValue;
    }
}

03.浅拷贝写法

javascript
let obj = {
        name: "张三",
        age: 20,
        other: {
            address: "山东",
            emailNumber: " 410097"
        },
        getName() {
            return this.name;
        }
};

// 使用浅拷贝
Object.assign({}, obj);