WeakMap與Map,使用WeakMap實現深拷貝循環引用問題


1.Map可以使用任意類型的key值,不限字符串,對象等。

2.WeakMap只能使用對象作為key值,是弱引用,當從WeakMap中移除時,會自動垃圾回收

3.Object只能用基本類型作為key值。

下面使用WeakMap解決深拷貝中對象循環引用問題

  function deepClone (origin, weakMap = new WeakMap()) {
    if (origin == undefined || typeof origin != 'object') {
      return origin
    }
    if (origin instanceof Date) {
      return new Date(origin)
    }
    if (origin instanceof RegExp) {
      return new RegExp(origin)
    }
    const val = weakMap.get(origin)
    if (val) return val
    const target = new origin.constructor()
    weakMap.set(origin, target)
    for (let k in origin) {
      target[k] = deepClone(origin[k], weakMap)
    }
    return target
  }
測試代碼:

let obj1 = {}
obj1.obj2 = obj1
let obj2 = deepClone(obj1)
console.log(obj2, 'obj2')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM