Set
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
构造
var s =
new Set();
var set =
new Set([
1,
2,
3]);
成员数
set.size
添加成员
set.add(
3);
set.add(
4);
删除成员
set.delete(
2);
是否包含
set.has(
5);
set.has(
4);
清除
set.clear();
转数组
let arr =
Array.from(set);
遍历
keys()
let set =
new Set([
'red',
'green',
'blue']);
for (
let item of set.keys()) {
console.log(item);
}
values()
let set =
new Set([
'red',
'green',
'blue']);
for (
let item of set.values()) {
console.log(item);
}
entries() entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。
let set =
new Set([
'red',
'green',
'blue']);
for (
let item of set.entries()) {
console.log(item);
}
简写
let set =
new Set([
'red',
'green',
'blue']);
for (
let x of set) {
console.log(x);
}
forEach() Set结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。
let set =
new Set([
'red',
'green',
'blue']);
set.forEach((value, key) => console.log(key +
' : ' + value))
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);
ws.delete(obj1);
ws.has(obj1);
ws.has(obj2);
ws.has(obj3);
WeakSet不能遍历,是因为成员都是弱引用,随时可能消失,遍历机制无法保证成员的存在,很可能刚刚遍历结束,成员就取不到了。WeakSet的一个用处,是储存DOM节点,而不用担心这些节点从文档移除时,会引发内存泄漏。