1.官方新推出的structuredClone
方法,可以直接实现对一个对象的深拷贝,首选,兼容性还不是很友好,IE目前还没有支持
2.递归实现深拷贝
//函数拷贝
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;
}
let o1 = {
name: 'o1',
friends: {
name: 'Ann'
}
}
let o2 = copyObj(o1);
console.log(o2.friends == o1.friends); //false
3.使用JSON.stringify将对象转换为字符串,然后再通过JSON.parse还原对象
这个方法要慎重使用,它在处理date对象和NaN,undefined和null还有函数类型的时候,会出错,具体可以参考这篇文章
4.使用lodash的cloneDeep方法
网友评论