12. Set 和 WeakSet

Set 对象是一组不重复的值,重复的值将被忽略,值类型可以是原始类型和引用类型:

  1. let mySet = new Set([1, 1, 2, 2, 3, 3]);
  2. mySet.size; // 3
  3. mySet.has(1); // true
  4. mySet.add('strings');
  5. mySet.add({ a: 1, b:2 });

可以通过 forEachfor…of 来遍历 Set 对象:

  1. mySet.forEach((item) => {
  2. console.log(item);
  3. // 1
  4. // 2
  5. // 3
  6. // 'strings'
  7. // Object { a: 1, b: 2 }
  8. });
  9. for (let value of mySet) {
  10. console.log(value);
  11. // 1
  12. // 2
  13. // 3
  14. // 'strings'
  15. // Object { a: 1, b: 2 }
  16. }

Set 同样有 delete()clear() 方法。

WeakSet

类似于 WeakMapWeakSet 对象可以让你在一个集合中保存对象的弱引用,在 WeakSet 中的对象只允许出现一次:

  1. var ws = new WeakSet();
  2. var obj = {};
  3. var foo = {};
  4. ws.add(window);
  5. ws.add(obj);
  6. ws.has(window); // true
  7. ws.has(foo); // false, foo 没有添加成功
  8. ws.delete(window); // 从结合中删除 window 对象
  9. ws.has(window); // false, window 对象已经被删除