es6之Set和Map

一. Set

  • (1)類似數(shù)組,成員值唯一,var s = new Set()
  • (2)s加入值用add,加入時不會發(fā)生類型轉(zhuǎn)換(判斷兩值是否相等用的 ===,但Set會認(rèn)為NaN等于自己)
  • (3)Set.prototype.constructor === Set , Set.prototype.size返回Set實例的成員總數(shù)
  • (4)delete刪除某個值,has返回布爾值,clear清空實例
    keys返回鍵名的遍歷器,values返回鍵值的遍歷器,entries返回鍵值對的遍歷器,
  • (5)Set.prototype[Symbol.iterator] === Set.prototype.values,所以可以直接用for...of遍歷set
  • (6)擴展運算符和Set結(jié)合,可以去重,返回數(shù)組類型

二. WeekSet

  • (1)成員只能是對象,方法有add、delete 、has
  • (2)WeakSet 里面的引用,都不計入垃圾回收機制
  • (3)WeakSet 不能遍歷,是因為成員都是弱引用,隨時可能消失,遍歷機制無法保證成員的存在,很可能剛剛遍歷結(jié)束,成員就取不到了。
  • (4)WeakSet 的一個用處,是儲存 DOM 節(jié)點,而不用擔(dān)心這些節(jié)點從文檔移除時,會引發(fā)內(nèi)存泄漏。

三. Map

  • (1)類似于對象,鍵值對的集合,鍵不限類型,即“值—值”的對應(yīng)
  • (2)任何具有Iterator的數(shù)據(jù)結(jié)構(gòu)都可以當(dāng)做構(gòu)造函數(shù)的參數(shù)
  • (3)對同一個鍵賦值,后面的會覆蓋掉前面的,Map 的鍵實際上是跟內(nèi)存地址綁定的,只要內(nèi)存地址不一樣,就視為兩個鍵
  • (4)size返回成員總數(shù),set(key, value),get(key),has(key),delete(key),clear()
  • (5)遍歷方法:keys(),values(),entries(),forEach()
  • (6)Map.prototype[Symbol.iterator] === Map.prototype.entries
  • (7)Map 結(jié)構(gòu)轉(zhuǎn)為數(shù)組結(jié)構(gòu),比較快速的方法是使用擴展運算符

四. WeakMap

  • (1)只接受對象作為鍵名,生成鍵值對的集合
  • (2)沒有遍歷操作,只有g(shù)et set has delete
  • (3)WeakMap 應(yīng)用的典型場合就是 DOM 節(jié)點作為鍵名
  • (4)WeakMap的鍵名所引用的對象都是弱引用,一旦不需要,里面的鍵名對象和所對應(yīng)的鍵值對會自動消失,不用手動刪除引用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容