说一下我的理解
深拷贝:新对象与旧对象没有关系,新对象的变量的值改变不会对旧对象变量的值产生影响,反之亦然
浅拷贝:新的对象的变量会用到旧对象的变量对应的地址,新对象的变量值改变时,旧对象的值也跟着改变,反之亦然
深拷贝
方法1 :
const 新对象= JSON.parse(JSON.stringify(旧对象))
缺点:数据类型为function或者数据值为undefined情况下无法复制
方法2
const 新对象= Object.assign({},(旧对象))
缺点:只能深拷贝一级属性,二级以上属性(如:数组)就是浅拷贝
方法3:扩展运算符
const 新对象 = {...旧对象}
缺点:与方法2一样
方法4:递归
function CloneDeep(data){
const newDate = Array.isArray(data) ? [] : {}
for( let key in data) {
if(data[key] && typeof data[key] === "object") {
newDate[key] = CloneDeep(data[key])
}
else{
newData[key] = data[key]
}
}
}
缺点:除了麻烦一点,没有缺点
补充:导lodedash包,用cloneDeep函数也可以实现深拷贝
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)