參考文獻: 阮一峯教程 es6
Set
相似於數組,可是成員的值是惟一的,沒有重複的值。
var s = new Set()
Set內部判斷兩個值是否不一樣使用的算法相似於精確相等運算符('===')。這意味着兩個對象老是不相等的。惟一的例外是NaN等於自身('==='認爲NaN不等於自身)
Set.prototype.constructor: 構造函數,默認是Set函數
Set.prototype.size: 返回Set實例成員的個數
add(): 添加某個值,返回Set解構自己
delete(): 刪除某個值,返回一個布爾值,表示是否刪除成功
has(): 返回一個布爾值,表示參數是不是Set結構的成員
clear: 清空全部成員,沒有返回值
keys()
values() // Set結構的鍵名和鍵值是同一個值
entries()
forEach()
若是想在遍歷操做中同步改變原來的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
WeakSet結構和Set相似,也是不重複的值的集合。可是,它與Set有兩個區別
WeakSet的成員只能是對象
WeakSet中的對象都是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用。也就是說,若是其餘對象都再也不引用該對象,那麼垃圾回收機制會自動回收該對象所佔用的內存,不考慮該對象是否還在存在於WeakSet結構中。
var ws = new WeakSet()
WeakSet.prototype.add()
WeakSet.prototype.delete()
WeakSet.prototype.has()
Map
相似於對象,也是鍵值對的集合,可是 '鍵' 的範圍不限於字符串 (普通對象只能用字符串作key值),各類類型的值(包括對象)均可以做爲key。
能夠接受一個數組爲參數,而且該數組的成員是一個個表示鍵值的數組new Map([['name', 'alex.cheng'], ['age', 24]])
獲取一個未知的key,返回 undefined
Map的鍵其實是跟內存地址綁定的,只要內存地址不一樣,就視爲兩個鍵
0 和 -0,NaN 和 NaN 表示同一個鍵
Map.prototype.size
Map.prototype.constructor
set(key, value)
get(key)
has(key)
delete(key)
clear()
keys()
values()
entries()
forEach()
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
WeakMap 結構與 Map 結構基本相似,惟一的區別是它只接受對象做爲鍵名(null除外),不接受其餘類型的值做爲鍵名,並且鍵名所指向的對象不計入垃圾回收機制
2. WeakMap的設計目的在於,鍵名是對象的弱引用(垃圾回收機制不將該引用考慮在內),因此其所對應的對象可能會被自動回收。當對象被回收或者被銷燬後,WeakMap將自動移出對應的鍵值對,再次訪問的時候就是undefined。
有助於防止內存泄漏