JS中的深拷贝

241 阅读1分钟

前言:我们经常会遇到想要将一个对象为己所用,但又不能污染原对象的需求,这就涉及到了js对象的深拷贝。 比如说在VUE的子组件中,父组件传过来的数据中若是有对象,而子组件需要用父组件的数据进行初始化并且有另做他用的需求。

常规深拷贝

function deepCopy(obj){
    let str,copyObj = obj.constructor === Array ? [] : {};
    if(typeof(obj) != 'object'){
        return;
    }else if(window.JSON){
        copyObj = JSON.parse(JSON.stringify(obj));
    }else{
        for(let i in obj){
            copyObj[i] = typeof(obj[i]) === 'object' ? deepCopy(obj[i]) : obj[i];
        }
    }
    return copyObj;
}

存在的问题:不能对特殊对象进行深拷贝【函数、日期对象、正则对象】,以及循环引用的问题。

对特殊对象的拷贝----结构化拷贝

结构化拷贝