一. 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)的鍵值對會自動消失,不用手動刪除引用。