// 深度遍历
// 思路:
// 遍历对象 for (var key in object)
// 判断是否是原始值 typeof
// 判断是对象还是数组 instanceof看原型链有无其原型 toString constructor (因父子域问题最好使用toString)
// 建立相应的数组或对象
function deepClone(origin,target){
var target = target || {};
var toStr = Object.prototype.toString;
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) {
if(origin[prop] !== "null" && typeof origin[prop] == "object"){ //判断是否是引用值
// 是引用值的处理
target[prop] = toStr.call(origin[prop]) == "[object Array]" ? [] : {};
deepClone(origin[prop],target[prop]);
}else{
// 不是引用值的处理
target[prop] = origin[prop];
}
}
}
return target;
}
var obj = {
aaa:111,
bbb:222,
ccc:{
aaaa:[1,2,3,4,5],
bbbb:{aaaa:[5,4,3,2,1]}
},
ddd:[{a:1},"fff",[1,2,{a:1}]]
}
var str = {}
console.log(deepClone(obj,str));