Map
- map對象是一個簡單的鍵/值映射。任何值(包括對象和原始值)都可以用作一個鍵或一個值膨蛮。
var m = new Map();
var o = {p: "Hello World"};
m.set(o, "content")
m.get(o) // "content"```
2. **Map**也可以接受一個數(shù)組作為參數(shù)跨新。該數(shù)組的成員是一個個表示鍵值對的數(shù)組。
var map = new Map([["name", "張三"], ["title", "Author"]]);
map.size // 2
map.get("name") // "張三"
map.get("title") // "Author"```
- size屬性 返回Map結(jié)構(gòu)的成員總數(shù)蛆挫。即返回映射對象中的鍵/值對的數(shù)目赃承。
- set(k,v) 方法返回的是Map本身璃吧,因此可以采用鏈?zhǔn)?/em>寫法。
- get(k) 方法讀取key對應(yīng)的鍵值畜挨,如果找不到key筒繁,返回undefined。
- has(key) 方法返回一個布爾值巴元,表示某個鍵是否在Map數(shù)據(jù)結(jié)構(gòu)中毡咏。
- delete(key) 方法刪除某個鍵,返回true呕缭。如果刪除失敗修己,返回false恢总。
- clear() 方法清除所有成員睬愤,沒有返回值。
- keys():返回鍵名的遍歷器砂豌。
- values():返回鍵值的遍歷器厢岂。
- entries():返回所有成員的遍歷器阳距。
- forEach():遍歷Map的所有成員。
WeakMap
- WeakMap結(jié)構(gòu)與Map結(jié)構(gòu)基本類似筐摘,唯一的區(qū)別是它只接受對象作為鍵名(null除外),不接受其他類型的值作為鍵名**扬虚,而且鍵名所指向的對象球恤,不計入垃圾回收機(jī)制辜昵。
var map = new WeakMap()
map.set(1, 2)
// TypeError: 1 is not an object!
map.set(Symbol(), 2)
// TypeError: Invalid value used as weak map key
- WeakMap的設(shè)計目的在于咽斧,鍵名是對象的弱引用(垃圾回收機(jī)制不將該引用考慮在內(nèi)),所以其所對應(yīng)的對象可能會被自動回收舀锨。當(dāng)對象被回收后宛逗,WeakMap自動移除對應(yīng)的鍵值對**。
- 典型應(yīng)用是雷激,一個對應(yīng)DOM元素的WeakMap結(jié)構(gòu)替蔬,當(dāng)某個DOM元素被清除屎暇,其所對應(yīng)的WeakMap記錄就會自動被移除。基本上凶异,WeakMap的專用場合就是,它的鍵所對應(yīng)的對象剩彬,可能會在將來消失矿卑。WeakMap結(jié)構(gòu)有助于防止內(nèi)存泄漏。
- WeakMap與Map在API上的區(qū)別主要是兩個粪摘,一是沒有遍歷操作(即沒有key()、values()和entries()方法)苔悦,也沒有size屬性;二是無法清空玖详,即不支持clear方法勤讽。這與WeakMap的鍵不被計入引用、被垃圾回收機(jī)制忽略有關(guān)脚牍。
- WeakMap只有四個方法可用:get()、set()诸狭、has()、delete()**芹彬。