javascript對深拷貝物件的研坑

2021-09-13 01:32:33 字數 1057 閱讀 4878

針對只有值的資料物件,下面一行**足以!

json.parse(json.stringify(obj))
function clone(source) ;

for(var i in source) else }}

return target;

}

問題存在:

function isobj(obj)

function deepcopy(obj)

; for(let key in obj)

return tempobj;

}

問題存在:

可以使用乙個weakmap結構儲存已經被拷貝的物件,每一次進行拷貝的時候就先向weakmap查詢該物件是否已經被拷貝,如果已經被拷貝則取出該物件並返回,將deepcopy函式改造成如下:

function isobj(obj)

function deepcopy(obj, hash = new weakmap())

hash.set(obj, cloneobj)

for (let key in obj)

return cloneobj

}

問題存在:

const obj = ,    a: () => ,    date: new date(),    reg: /正則/ig}

function isobj(obj)

function deepcopy(obj, hash = new weakmap())

for (let key in obj)

return cloneobj;

}const cloneobj = deepcopy(obj);

console.log(cloneobj);

更多遺留問題,針對函式進行拷貝,若是function,非箭頭函式,如何解決?還有,若要拷貝原型鏈上的屬性?如何拷貝不可列舉屬性? 如何拷貝error物件等等的坑?

javascript對深拷貝物件的研坑

針對只有值的資料物件,下面一行 足以!json.parse json.stringify obj 複製 function clone source for var i in source else return target 複製 問題存在 function isobj obj function d...

JavaScript深拷貝 淺拷貝

淺拷貝 淺拷貝只是複製了記憶體位址,如果原位址中的物件改變了,淺拷貝出來的物件也會相應改變。深拷貝 開闢了一塊新的記憶體存放位址和位址指向的物件,原位址的任何物件改變了,深拷貝出來的物件不變。淺拷貝陣列 只拷貝第一級陣列 1.直接遍歷var arr 1,2,3,4 function copy arg...

javaScript淺拷貝 深拷貝

資料型別 js的資料型別有兩種 1.基本資料型別 數值 字串 布林 null undefined 值型別 存放在棧中,所以複製基本資料型別的值是會新開乙個棧記憶體 淺拷貝 如果我們要複製物件的所有屬性都不是引用型別時,就可以使用淺拷貝,實現方式就是遍歷並複製,最後返回新的物件。深拷貝 深度拷貝就是把...