前端JavaScript之手写实现:浅拷贝,深拷贝

浅拷贝

浅拷贝:一般指的是把对象的第一层拷贝到一个新对象上去

    // 浅拷贝
    function shallowCopy(object) {
    
    
        // 只拷贝对象类型
        if (!object || typeof object !== "object") return;
        // 根据object的类型判断是新建一个数组还是对象
        let newObject = Array.isArray(object) ? [] : {
    
    };
        // 遍历object,并且判断是object的属性才拷贝
        for (let key in object) {
    
    
            if (Object.prototype.hasOwnProperty.call(object, key)) {
    
    
                newObject[key] = object[key];
            }
        }
        return newObject;
    }

深拷贝

深拷贝:一般需要借助递归实现,如果对象的值还是个对象,要进一步的深入拷贝,完全替换掉每一个复杂类型的引用

    // 深拷贝
    function deepCopy(object) {
    
    
        if (!object || typeof object !== "object") return;
        let newObject = Array.isArray(object) ? [] : {
    
    };
        for (let key in object) {
    
    
            // 判断是object的属性才拷贝
            if (Object.prototype.hasOwnProperty.call(object, key)) {
    
    
                newObject[key] = 
                    typeof object[key] === "object" ? deepCopy(object[key]) : object[key];
            }
        }
        return newObject;
    }

猜你喜欢

转载自blog.csdn.net/xiaorunye/article/details/130073035
今日推荐