優點:
缺點:
let a =
;let b =
;a.b = b;
let copyobj =
json
.parse
(json
.stringify
(a))
;console.
log(copyobj)
;// typeerror
let a =
;let b =
newset()
;b.add(
123)
;a.s = b;
let copyobj =
json
.parse
(json
.stringify
(a))
;console.
log(a)
;// }
console.
log(copyobj)
;// } set 丟失。
let jsonobj =
json
.parse
(json
.stringify
(obj)
);
此方法仍不能解決物件深層次引用和內建型別資料丟失的問題。
function
deepclone
(origin, target)
;for
(var k in origin)
;deepclone
(origin[k]
, tar[k]);
}else}}
return tar;
}
通過借助es6的weakmap
來解決重複物件之間引用的問題。
function
deepclone
(origin, hashmap =
newweakmap()
)// 用於解決內建型別丟失問題
if(origin instanceof
date)if
(origin instanceof
regexp)if
(origin instanceof
set)
if(origin instanceof
map)
const hashkey = hashmap.
get(origin);if
(hashkey)
const target =
neworigin.constructor()
;// 相當於 array.isarray(origin)?:{}; / tar[k] = object.prototype.tostring(origin[k]) === '[object array]' ? : {};
hashmap.
set(origin, target)
;// 針對 symbol型別
const symkeys = object.
getownpropertysymbols
(origin);if
(symkeys.length >0)
else})
}for
(let k in origin)
}return target;
}
有問題歡迎指出,一起**學習! 深拷貝和淺拷貝問題
下午遇到乙個關於乙個表的數值拷貝的問題,有點意思,不多說,直接上 記錄玩家的資訊 self.userinfo for i 1,play count do table.insert self.userinfo,self.deskuserlist getuserbydeskstation i 1 end...
深拷貝和淺拷貝使用問題
定義 如果類中包含了使用new初始化的指標成員,應當定義乙個複製建構函式,以複製指向的資料,而不是指標,這是深度複製或深拷貝。複製的另一種形式只是複製指標值,稱為成員複製或淺複製或淺拷貝。它只複製指標資訊,而不會深入 挖掘 以複製指標引用的結構。c primer plus裡深淺拷貝的圖示 圖中的是深...
深拷貝和淺拷貝的問題
不拷貝 賦值 舉個例子 let a let b a b.a 20 console.log a.a 20直接賦值的話,物件是指向同一記憶體,所以修改物件b的屬性,物件a的屬性同時也會改變 淺拷貝 object.assign 和解構賦值.舉個例子 let a let b object.assign a ...