``
const copyObj = (obj = {}) => {
//变量先置空
let newobj = null;
//判断是否需要继续进行递归
if (typeof (obj) == 'object' && obj !== null) {
newobj = obj instanceof Array ? [] : {};
//进行下一层递归克隆
for (var i in obj) {
newobj[i] = copyObj(obj[i])
}
//如果不是对象直接赋值
} else newobj = obj;
return newobj;
}
对象浅拷贝时,分清对象展开运算符和Object.assign的区别
let aa = { a : 1, b : 2, c : 3};
let bb = Object.assign(aa, {d : 4});
// 修改aa
delete aa.a;
// 结果bb也发生了变化
console.log(bb);
// {b: 2, c: 3, d: 4}
let aa = { a : 1, b : 2, c : 3};
// 解法1
let bb = Object.assign({}, aa, {d : 4});
// 解法2
let cc = {...aa, d : 4};
// 修改aa
delete aa.a;
console.log(bb);
// {a: 1, b: 2, c: 3, d: 4}
console.log(cc);
// {a: 1, b: 2, c: 3, d: 4}