var obj ={name:'小明',age:'20',address:['重庆','上海','北京','深圳'],girlFriend:{age:18,address:['重庆','新加坡','印度尼西亚']}}varO={};for(var key in obj){O[key]=obj[key]}
console.log(o,obj)O.name ='小红';O.age =30;O.address.push('广州')O.girlFriend.age=50
console.log(O,obj)//o对象中名字和年龄改变而原对象中不变//但是o对象中将girlFriend对象中的年龄和地址改变//原对象的年龄和地址也跟着改变
深拷贝
深拷贝会对基本类型和引用类型的每一级数据都拷贝
如果改变新对象的值那么原来被拷贝的对象不会跟着改变
var obj ={name:'老王',age:40,address:['重庆','上海','北京','深圳'],girlFriend:{age:18,address:['重庆','新加坡','印度尼西亚']}}var o ={};//创建递归函数functiontraversal(newobj, oldobj){for(var key in oldobj){var item = oldobj[key];if(item instanceofArray){
newobj[key]=[];traversal(newobj[key], item)}elseif(item instanceofObject){
newobj[key]={};traversal(newobj[key], item)}else{
newobj[key]= item
}}}traversal(o, obj)
o.name ='小红';
o.address.push('广州')
o.girlFriend.age =20
console.log(o, obj)//o对象中姓名、住址、girlFriend对象中的年龄发生改变//obj中的还是原来的数据不会被改变。