//第一种方法 递归
function deepCopy(newObj,oldObj){
for(k in oldObj){
//k为属性名, oldObj[k]为属性值
if(oldObj[k] instanceof Array){ //判断如果属性值为数组
newObj[k] = [];
deepCopy(newObj[k],oldObj[k]);
}else if(oldObj[k] instanceof Object){ //判断如果属性值为对象,这里一定要先判断数组、再判断对象,因为数组也是对象的一种
newObj[k] = {};
deepCopy(newObj[k],oldObj[k]);
}else{
newObj[k] = oldObj[k];
}
}
};
const person = {
name:'张三',
age:14,
hobby:["打篮球","踢足球"],
classmate:{
name:'李四',
age:14,
hobby:["打篮球","游泳"]
}
};
const person2 = {};
//调用拷贝方法
deepCopy(person2,person);
console.log("person2:",person2);
//更改person2的爱好
person2.hobby = ["打篮球","玩电脑"];
//原person的数据未发生变化
console.log("person:",person);
//第二种方法 利用json方法
var jsonPerson = {
name:'张三',
age:14,
hobby:["打篮球","踢足球"],
classmate:{
name:'李四',
age:14,
hobby:["打篮球","游泳"]
}
};
//把对象 转化为JSON字符串, 把数据类型由引用转化为普通数据类型
const strPerson = JSON.stringify(jsonPerson);
console.log(strPerson);
//把字符串 转换为 对象
const newPerson = JSON.parse(strPerson);
console.log(newPerson);