學習筆記--深度克隆
阿新 • • 發佈:2018-12-03
//物件的深拷貝,不考慮包含函式 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);