Set
// 可以通過數組創建一個set(具有 iterable 接口的其他數據結構都行)
let set = new Set([1,2,3,2]);
// 通過set.size獲取Set的大小
console.log(set.size);
//Set.prototype.add(value):添加某個值,返回 Set 結構本身。
set.add(4);
// Set.prototype.delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。
set.delete(1);
//Set.prototype.has(value):返回一個布爾值,表示該值是否爲Set的成員。
set.has(2);
//Set.prototype.clear():清除所有成員,沒有返回值。
set.clear();
//Set.prototype.keys():返回鍵名的遍歷器
//Set.prototype.values():返回鍵值的遍歷器
//Set.prototype.entries():返回鍵值對的遍歷器
//Set.prototype.forEach():使用回調函數遍歷每個成員
let set = new Set(['red', 'green', 'blue']);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
WeakSet
它與 Set 有兩個區別。
- 首先,WeakSet 的成員只能是對象,而不能是其他類型的值。
- WeakSet 中的對象都是弱引用,即垃圾回收機制不考慮 WeakSet 對該對象的引用,也就是說,如果其他對象都不再引用該對象,那麼垃圾回收機制會自動回收該對象所佔用的內存,不考慮該對象還存在於 WeakSet 之中。
Map
JavaScript 的對象(Object),本質上是鍵值對的集合(Hash 結構),但是傳統上只能用字符串當作鍵。這給它的使用帶來了很大的限制。
const m = new Map();
const o = {p: 'Hello World'};
// set方法設置元素
m.set(o, 'content')
// 獲取key爲o的value
m.get(o) // "content"
// has判斷是否存在某個元素與map中
m.has(o) // true
// 刪除key爲o的某個元素
m.delete(o) // true
m.has(o) // false
WeakMap
WeakMap與Map的區別有兩點。
- WeakMap只接受對象作爲鍵名(null除外),不接受其他類型的值作爲鍵名。
- WeakMap的鍵名所指向的對象,不計入垃圾回收機制。