ES6: Set

xiaoxiao2021-02-28  23

Set

ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

构造
var s = new Set(); // 构造一个空Set var set = new Set([1, 2, 3]); // 带值的构造
成员数
set.size // 3
添加成员
set.add(3); set.add(4); // [1, 2, 3, 4] // 链式方法 set.add(3).add(4);
删除成员
set.delete(2); // [1, 3, 4]
是否包含
set.has(5); // false set.has(4); // true
清除
set.clear(); // []
转数组
let arr = Array.from(set);
遍历
keys() let set = new Set(['red', 'green', 'blue']); for (let item of set.keys()) { console.log(item); } // red // green // blue values() let set = new Set(['red', 'green', 'blue']); for (let item of set.values()) { console.log(item); } // red // green // blue entries() entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。 let set = new Set(['red', 'green', 'blue']); for (let item of set.entries()) { console.log(item); } // ["red", "red"] // ["green", "green"] // ["blue", "blue"] 简写 let set = new Set(['red', 'green', 'blue']); for (let x of set) { console.log(x); } // red // green // blue forEach() Set结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。 let set = new Set(['red', 'green', 'blue']); set.forEach((value, key) => console.log(key + ' : ' + value)) // red : red // green : green // blue : blue

WeakSet

WeakSet结构与Set类似,也是不重复的值的集合。但是,它与Set有两个区别。 1. WeakSet的成员只能是对象,而不能是其他类型的值。 2. WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。

构造
const a = [[1, 2], [3, 4]]; const ws = new WeakSet(a);
方法

WeakSet只有add()、delete()、has()方法

const obj1 = {}; const obj2 = {}; const obj3 = {}; let ws = new WeakSet(); ws.add(obj1).add(obj2); // [obj1, obj2] ws.delete(obj1); // [obj2] ws.has(obj1); // false ws.has(obj2); // true ws.has(obj3); // false

WeakSet不能遍历,是因为成员都是弱引用,随时可能消失,遍历机制无法保证成员的存在,很可能刚刚遍历结束,成员就取不到了。WeakSet的一个用处,是储存DOM节点,而不用担心这些节点从文档移除时,会引发内存泄漏。

转载请注明原文地址: https://www.6miu.com/read-2629825.html

最新回复(0)