深拷貝問題

2021-10-11 18:22:23 字數 1800 閱讀 5824

優點:

缺點:

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;

}

通過借助es6weakmap來解決重複物件之間引用的問題。

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 ...