javascript 深拷贝
const obj1 = {
name: 'xxx',
age: 18,
address: {
city: '北京'
},
arr: [1, 2, 3],
add: () => {console.log(1)}
}
function deepClone(obj = {}) {
if(typeof obj !== 'object' || obj == null) {
//如果obj 不等于对象或者数组或者obj等于null 直接返回
return obj
}
//返回数据
let result
if(obj instanceof Array) {
result = []
}else {
result = {}
}
//遍历对象
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
//递归
result[key] = deepClone(obj[key])
}
}
//返回
return result
}
const obj2 = deepClone(obj1)
obj2.address.city = "上海"
console.log(obj1.address.city) //北京
还有一种简单粗暴的方法:JSON.stringify()和JSON.parse() 【但是这种方法存在缺陷】
const obj1 = {
name: 'xxx',
age: 18,
address: {
city: '北京'
},
arr: [1, 2, 3],
add: () => {console.log(1)}
}
const obj1Str = JSON.stringify(obj1)
const obj2 = JSON.parse(obj1Str)
console.log(obj2)
缺陷:
js方法拷贝不上!!!!!!!!!!!