深拷贝和浅拷贝区别
假设A复制了B,当B属性值发生改变 A也跟着改变 这就是浅拷贝 反之深拷贝,
var person1 = { name : '张三', age : 18, sex : 'male', children : { first : { name : '小一', age : 15 }, center : { name : '小二', age : 10 }, last : { name : '小三', age : 5 }, car : ['Benz', 'Mazda'] }, arr : [1, 2], fun : function(){} }; // console.log(person1) //浅拷贝 var tt = {}; for(var key in person1){ tt[key] = person1[key] } // tt.children.aa = 'bb'; // console.log(tt) // //深拷贝 function deepClone (origin, target){ var target = target || {}; var toStr = Object.prototype.toString; var arrType = '[object Array]'; for(var key in origin){ if(origin.hasOwnProperty(key)){ //hasOwnProperty判断属性是否自己本身属性 原型继承来的则判断为假 if(typeof(origin[key]) === 'object' && origin[key] !== null){ if(toStr.call(origin[key]) === arrType){ target[key] = []; }else{ target[key] = {}; } deepClone (origin[key], target[key]) }else{ target[key] = origin[key] } } } return target } console.log(deepClone(person1));