//第一种方法 递归 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);