js数据类型分为,基本类型与引用类型。
浅拷贝只能实现,基本类型数据的传值与引用类型数据的传址。并不会为引用数据开辟新的堆内存,这样就会造成,引用类型数据修改,复制数据与原数据都被更改。
- 解决的方法,我们可以使用递归去完成深层次的拷贝(对象与数组)
function cloneObj(obj) {
if(obj === null || typeof obj !== 'object') return obj
if(window.JSON) return JSON.parse(JSON.stringify(obj))
let newObj = obj.contructor === Array ? [] : {}
for(let key in obj){
console.log(key)
newObj[key] = typeof obj[key] === 'object'? cloneObj(obj[key]) : obj[key]
}
return newObj
}