var obj = {
name : 'abc',
age : 18,
sex : "male",
card : ['card1','card2'],
wife : {
name : "bcd",
son : {
name : "aaa"
}
}
}
var obj1 = {};
//判断是不是原始值
//判断是数组还是对象 toString(建议使用) constructor instanceof(后两种跨域使用会出现问题)
//建立数组或对象
//递归调用
function deepClone(origin, target){
var target = target || {}, //如果没有传入第二个参数,那么就自己创建一个对象
toStr = Object.prototype.toString,
arrStr = "[object Array]"; //[].toString()的返回值
for(var prop in origin){
if(origin[prop] !=="null" && origin.hasOwnProperty(prop)){ //防止对象的值是null
if(typeof(origin[prop]) == "Object"){
target[prop] = (toStr.call(origin[prop] == arrStr)) ? [] : {};
deepClone(origin[prop],target[prop]);//递归调用
}else{
target[prop] = origin[prop];
}
}
}
return target;
}
deepClone(obj, obj1);