Set,WeakSet,Map,WeakMap

參考文獻: 阮一峯教程es6

Set

  • 基本用法
  1. 相似於數組,可是成員的值是惟一的,沒有重複的值。
  2. var s = new Set()
  3. Set內部判斷兩個值是否不一樣使用的算法相似於精確相等運算符('===')。這意味着兩個對象老是不相等的。惟一的例外是NaN等於自身('==='認爲NaN不等於自身)
  • 實例的屬性
  1. Set.prototype.constructor: 構造函數,默認是Set函數
  2. Set.prototype.size: 返回Set實例成員的個數
  • 實例的操做方法
  1. add(): 添加某個值,返回Set解構自己
  2. delete(): 刪除某個值,返回一個布爾值,表示是否刪除成功
  3. has(): 返回一個布爾值,表示參數是不是Set結構的成員
  4. clear: 清空全部成員,沒有返回值
  • 實例的遍歷方法
  1. keys()
  2. values() // Set結構的鍵名和鍵值是同一個值
  3. entries()
  4. forEach()
  • 總結
  1. 若是想在遍歷操做中同步改變原來的Set結構,目前沒有直接的方法,只有兩種變通的方法。
// 方法一
let set = new Set([1,2,4])
set = new Set([...set].map(item => item * 2))

// 方法二
let set = new Set([1,2,4])
set = new Set(Array.from(set, x => x * 2))
複製代碼

WeakSet

  • 基本用法
  1. WeakSet結構和Set相似,也是不重複的值的集合。可是,它與Set有兩個區別
  2. WeakSet的成員只能是對象
  3. WeakSet中的對象都是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用。也就是說,若是其餘對象都再也不引用該對象,那麼垃圾回收機制會自動回收該對象所佔用的內存,不考慮該對象是否還在存在於WeakSet結構中。
  4. var ws = new WeakSet()
  • 實例方法
  1. WeakSet.prototype.add()
  2. WeakSet.prototype.delete()
  3. WeakSet.prototype.has()

Map

  • 基本用法
  1. 相似於對象,也是鍵值對的集合,可是 '鍵' 的範圍不限於字符串 (普通對象只能用字符串作key值),各類類型的值(包括對象)均可以做爲key。
  2. 能夠接受一個數組爲參數,而且該數組的成員是一個個表示鍵值的數組new Map([['name', 'alex.cheng'], ['age', 24]])
  3. 獲取一個未知的key,返回 undefined
  4. Map的鍵其實是跟內存地址綁定的,只要內存地址不一樣,就視爲兩個鍵
  5. 0 和 -0,NaN 和 NaN 表示同一個鍵
  • 實例的屬性和方法
  1. Map.prototype.size
  2. Map.prototype.constructor
  3. set(key, value)
  4. get(key)
  5. has(key)
  6. delete(key)
  7. clear()
  • 遍歷方法
  1. keys()
  2. values()
  3. entries()
  4. forEach()
  • 總結
  1. Map自己沒有map和filter方法,結合數組的方法,實現過濾
let map1= new Map()
    .set(1, 'a')
    .set(2, 'b')
    .set(3, 'c')
let map2 = new Map([...map1].filter(([key, value]) => k < 3))
// filter(([key, value) => {}) [key, value] 這裏是解構賦值
複製代碼

WeakMap

  • 基本使用

  1. WeakMap 結構與 Map 結構基本相似,惟一的區別是它只接受對象做爲鍵名(null除外),不接受其餘類型的值做爲鍵名,並且鍵名所指向的對象不計入垃圾回收機制

2. WeakMap的設計目的在於,鍵名是對象的弱引用(垃圾回收機制不將該引用考慮在內),因此其所對應的對象可能會被自動回收。當對象被回收或者被銷燬後,WeakMap將自動移出對應的鍵值對,再次訪問的時候就是undefined。

  1. 有助於防止內存泄漏
相關文章
相關標籤/搜索