1)常用的的递归深拷贝
function deepClone(origin, target) {
let tar = target || {},
toStr = Object.prototype.toString,
arrType = '[object Array]';
for (let k in origin) {
if (origin.hasOwnProperty(k)) { //非原型上的属性
if (typeof origin[k] === 'object' && origin[k] !== null) { //null 也是对象
tar[k] = toStr.call(origin[k]) === arrType ? [] : {}
deepClone(origin[k], tar[k]) //递归
} else {
tar[k] = origin[k]
}
}
}
return tar
}
let obj = {
id: 1,
name: 'liSi',
msg: {
age: 18
},
color: ['pick', 'red']
}
const newObj = deepClone(obj, {})
newObj.msg.age = 20
console.log(obj)
console.log(newObj)

image.png