Apache安裝ssl證書
阿新 • • 發佈:2021-01-21
技術標籤:JavaScriptjavascript
淺拷貝只拷貝一層, 深層次的物件只會拷貝其引用(也就是資料存放的記憶體地址),只要修改值原來物件都會修改,語法糖Object.assign(o, obj)
深拷貝會拷貝多層,每一層資料都會拷貝 ,會拷貝深層次的物件和陣列,會重新開闢空間再指向拷貝的物件,修改值時不會改變原來物件的值,第三方外掛lodash
// 淺拷貝案例 var obj = { name:'1', msg:{ age: 18, color: ['pink', 'red'] } } var o = {} // for(k in obj){ // o[k] = obj[k] // } // console.log(o) // o['msg']['age'] = 20 // console.log(o['msg']['age']); // console.log(obj['msg']['age']); // 語法糖assign console.log(Object.assign(o, obj)); console.log(o); 深拷貝利用遞迴來做 var obj2 = {} function deepCopy(newObj, oldObj) { for (let k in oldObj) { // 獲取屬性值 oldObj[id] = 1 var item = oldObj[k] // 判斷是否是陣列 if (item instanceof Array){ newObj[k] = [] deepCopy(newObj[k], item) } // 判斷是否是陣列 else if (item instanceof Object){ newObj[k] = {} deepCopy(newObj[k], item) } // 簡單資料型別 newobj[id] = oldObj[id] = 1 else{ newObj[k] = item } } } deepCopy(obj2, obj) console.log(obj2); obj2.msg.age = 30 console.log(obj.msg.age); // 20