Set
- 屬性:
- Set.prototype.constructor:
- Set.prototype.size:
- 方法
- 操做方法
- 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不可遍歷
- 屬性
- 沒有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