陣列和物件的深淺克隆
阿新 • • 發佈:2020-11-28
克隆obj
Object.assign():物件合併,實現物件的淺克隆
畫圖理解
物件展開運算子
{...obj},展開運算子,也只能展開第一級,也是淺克隆。
let newObj = {
...obj
}
深克隆 json.parse(json.stringify())
封裝一個深克隆函式
程式碼啊
let obj = { a:11, b:[1,2,3], c:{x:11}, s:function(){}, d:/^\d+$/, e:new Date() } function clonedeep(obj){ const constructor = obj.constructor; if (obj === null) return null; if(typeof obj !== "object") return obj; if(/^(RegExp|Date)$/i.test(constructor.name)) return new constructor(obj) let clone = new constructor() for(let key in obj){ if(!obj.hasOwnProperty(key)) break; clone[key] = clonedeep(obj[key]) } return clone } let newobj = clonedeep(obj) console.log(obj,newobj) console.log(newobj === obj) //false console.log(newobj.b === obj.b) //false console.log(newobj.c === obj.c) //false console.log(newobj.d === obj.d) //false console.log(newobj.s === obj.s)