Set和Map

Set

  1. 屬性:
    • Set.prototype.constructor:
    • Set.prototype.size:
  2. 方法
    • 操做方法
      • add
      • delete
      • has
      • clear
      • Array.from()能夠將Set結構轉爲數組
    • 遍歷方法
      • keys():返回鍵名的遍歷器,結果與values()相同
      • values(): 返回鍵值的遍歷器
      • entries():返回鍵值對的遍歷器
      • forEach(value,index,array)
      • set結構實例默承認遍歷
    • 擴展運算符...內部使用for...of循環,例如:[...new Set(arr)],去除重複成員
    • 數組的map,filter間接的用於`new Set([...set].map(x => x * 2));

WeakSet

  • 成員只能是對象,對象都是弱引用,webSet內的引用不計入垃圾回收機制,只適合臨時存放一組對象以及對象的綁定信息,只要這些對象在外部消失,他在weakSet裏面的引用就會消失。
  • weakset的成員不適合引用,會隨時消失,內部成員的個數,取決於垃圾回收機制有沒有運行,es6規定weakSet不可遍歷
  • 屬性
    • add
    • delete
    • has
  • 沒有size屬性,沒法遍歷。
  • 一個用處,儲存DOM節點。

Map

  • Object,本質上是鍵值對的集合(Hash結構),傳統上只能用字符看成鍵
  • Map的set方法
  • Map能夠接受一個數組做爲參數
const map = new Map([ ['name', '張三'], ['title', 'Author'] ]); 
  • 屢次賦值會覆蓋,讀取位置的鍵,返回undefined
  • Map的鍵名實際上跟內存地址綁定,只要內存地址不同,就被認定爲是兩個鍵,若是是簡單類型的值(數字、字符串、布爾值),值嚴格相等就將被視爲一個鍵,undefined和null不一樣,NaN是同一個
  • 實例屬性和操做方法
    • size
    • set(key,value)
    • get(key)
    • has(key)
    • delete(key)
    • clear()
  • 遍歷方法
    • keys()
    • values()
    • entries()
    • forEach()
  • Map與其餘數據類型的轉換
    • Map轉爲數組...
    • 數組轉Map,傳入構造函數
    • Map轉爲對象,若是全部鍵是字符串
      function strMapToObj(strMap) { let obj = Object.create(null); for (let [k,v] of strMap) { obj[k] = v; } return obj; } 
    • 對象轉爲Map
      function objToStrMap(obj) { let strMap = new Map(); for (let k of Object.keys(obj)) { strMap.set(k, obj[k]); } return strMap; } 
    • Map轉JSON,map鍵名都是字符串:先轉換爲對象,不然轉爲數組JSON
    • JSON轉Map,json轉爲對象,在轉map,若是json是一個數組,直接傳入Map構造函數。

weakMap

  • weakMap只接受對象做爲鍵名,不接受其餘類型的值做爲鍵名
  • weakMap鍵名所指的對象,不計入垃圾回收機制
  • 鍵名所引用的對象都是弱引用,即垃圾回收機制不將該引用考慮在內
  • 應用創景:DOM 元素上添加數據,就能夠使用WeakMap結構。當該 DOM 元素被清除,其所對應的WeakMap記錄就會自動被移除
  • 兩個區別:沒有便利擦歐總,沒有size
相關文章
相關標籤/搜索