浅拷贝出现的前提:引用类型数据(对象和数组)
深拷贝和浅拷贝:
对象浅拷贝:
1.Json转换方法(开发中常用方法)
缺点:数据类型为function或者数据值为undefined情况下无法复制
2.Object.assign方法
缺点:只能深拷贝一级属性,二级以上属性(引用类型)就是浅拷贝
3.扩展运算符
缺点:只能深拷贝一级属性,二级以上属性(引用类型)就是浅拷贝
4.递归(比较完美的解决方案)
function deepCopy(data){
const newData=Array.isArray(data)?[]:{}
for(let key in data){
// 如果是数组key为index
if(data[key]&& typeof data[key]==="object"){
// typeof 后面不管是数组还是对象,后面的值为object
newData[key]=CloneDeep(data[key])
}else{
newData[key]=data[key]
}
return newData
}
数组的浅拷贝:
1.Json转换方法(开发中常用方法)
缺点:数据类型为function或者数据值为undefined情况下无法复制
2.Object.assign方法
缺点:只能深拷贝一级属性,二级以上属性(引用类型)就是浅拷贝
3.扩展运算符
缺点:只能深拷贝一级属性,二级以上属性(引用类型)就是浅拷贝
4.slice/concat
缺点:只能深拷贝一级属性,二级以上属性(引用类型)就是浅拷贝
5.递归(比较完美的解决方案)
function CloneDeep(data){
const newData=Array.isArray(data)?[]:{}
for(let key in data){
// 如果是数组key为index
if(data[key]&& typeof data[key]==="object"){
// typeof 后面不管是数组还是对象,后面的值为object
newData[key]=CloneDeep(data[key])
}else{
newData[key]=data[key]
}
return newData
}