//对象的深拷贝,不考虑包含函数
var obj1={
num:10,
str:'yans',
arr:[1,2,3],
obj:{
num:11,
str:'chengy',
arr:[4,5,6],
obj:{
num:12,
judge:true
}
}
};
var obj2={};
function deepClone(obj1,obj2) {//修改一个对象,另一个对象不受影响
for(var prop in obj1){//遍历对象1
if(obj1.hasOwnProperty(prop)){ //判断是否是obj1拥有的(不包含继承的)
/*
typeof的返回值有6种
number,boolean(true,false),string,undefined,object(对象,数组和null),function
*/
if(obj1[prop]!=="null"&&typeof(obj1[prop])=='object'){//引用类型
/*
区分对象和数组有三种方式: a=[],b={}
Object.prototype.toString.call(a)---->'[object Array]'
Object.prototype.toString.call(b)---->'[object Object]'
a instanceof Array---->true a instanceof Object---->true
b instanceof Array---->false b instanceof Object---->true
a.constructor==Array---->true a.constructor==Object---->false
b.constructor==Array---->false b.constructor==Object---->true
*/
if(Object.prototype.toString.call(obj1[prop])=='[object Array]')
obj2[prop]=[];
else
obj2[prop]={};
deepClone(obj1[prop],obj2[prop]);
}
else{//值类型
obj2[prop]=obj1[prop];
}
}
}
}
deepClone(obj1,obj2);