【JavaScript】浅克隆与深克隆
var originObj = { name: "小明", array:["666","777","888"], object:{ name:"lgq", prop:["good","beautiful","cool"], obj:{ age:"18", sex:"boy" } } } var targetObj = {}; /** * 浅克隆 */ function clone(origin,target){ var target = target || {};//target若不定义,默认为空{} for(var prop in origin){//枚举原始对象属性(数组同样适用只是数组的prop为下标0、1、2...) if(origin.hasOwnProperty(prop)){//判断属性是否是其本身的属性 返回true或false(为的是过滤其原型链上的属性) target[prop] = origin[prop]//原始对象属性clone至目标对象 } } return target; } /** * 深克隆 */ function deepClone(origin,target){ var target = target || {},//target若不定义,默认为空{} toStr = Object.prototype.toString,//判断值是数组还是对象的方法 isObj = "[Object Object]"; for(var prop in origin){//枚举原始对象属性(数组同样适用只是数组的prop为下标0、1、2...) if(origin.hasOwnProperty(prop)){//判断属性是否是其本身的属性 返回true或false(为的是过滤其原型链上的属性) if(origin[prop] !== "null" && typeof(origin[prop]) == "object"){ target[prop] = toStr.call(origin[prop]) == isObj ? {} : [];//判断值是否为对象,以此赋值 deepClone(origin[prop],target[prop])// 递归再次判断执行 }else{ target[prop] = origin[prop] //原始对象属性clone至目标对象 } } } return target; }