前言:我们经常会遇到想要将一个对象为己所用,但又不能污染原对象的需求,这就涉及到了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;
}
复制代码
存在的问题:不能对特殊对象进行深拷贝【函数、日期对象、正则对象】,以及循环引用的问题。
对特殊对象的拷贝----结构化拷贝
结构化拷贝