浅度拷贝(js的数据类型)数组,对象
1.基本数据类型,引用数据类型
第一层是深度拷贝,第二层或者是第三层那么是浅度拷贝(拷贝内存引用地址)
导致拷贝的数组值发生变化,原数组的值也会跟着发生变化
2.JSON.parse(JSON.stringify(obj))将js对象序列化(JSON字符串),
再使用JSON.parse来反序列化(还原)js对象;
当数据und,null,Symbol(缺陷)
3.手动递归的方式来实现深度克隆
浅度拷贝(js的数据类型)数组,对象
let obj={
age:21355,
name:"绝代风华",
books:["《时间的话》","《海底世界》","《软天空》"],
friends:{
name:"读后感积分",
age:251232,
books:["多喝水防护","大户复工","供电所覆盖","花多少功夫"]
}
}
//递归深度拷贝
function shows(obj){
let objss=obj instanceof Array ? [] : {};//三元表达式 条件?表达式1:表达式2
for (let key in obj) {
if (obj.hasOwnProperty(key)) {//判断obj中是否存在当前key值,存在返回true,不存在返回false
if (obj[key]&&typeof obj[key]==='object') {//判断obj是否为空,并且类型是否为对象类型
// console.log(obj[key]);
objss[key]=shows(obj[key]);//是对象类型则重新调用函数
} else{
objss[key]=obj[key];//不是对象类型则直接赋值
}
}
}
return objss;//把拷贝好的对象返回给函数
}
let objss= shows(obj)
console.log(objss);