Set - набор одиночных уникальных значений.
Map - набор значений типа key: value.
Weak типы - это не перечисляемые аналоги Set и Map и они не могут содержать в качестве ключа не объекты, а нужны для более простой очистки памяти.
var s = new WeakSet();
// Мы добавили анонимный объект в WeakSet,
// но т.к. на него нет внешних ссылок,
// то он будет немедленно удалён сборщиком мусора
s.add({});
Пример из жизни WeakMap: у меня на сервере в нём лежат {
объект соединения пользователя : ИД сессии} и когда рвётся связь и объект соединения удаляется, то он автоматически чистися из WeakMap.