[...new Set(array)] removes duplicates. A Set has add() (chainable), has(), delete(), clear(), size, forEach(), values(), keys() and entries(); objects count by identity. A WeakSet has only add(), has() and delete(), holds objects and non-registered symbols weakly and cannot be iterated, which suits marking objects as visited. ES2025 (Baseline 2024) added set algebra accepting any set-like argument (size, has(), keys()), even a Map:
| Method | Result |
|---|---|
| a.union(b) | New set: in a or b (order: a, then new items from b) |
| a.intersection(b) / a.difference(b) | New set: in both / in a only |
| a.symmetricDifference(b) | New set: in exactly one |
| a.isSubsetOf(b) / a.isSupersetOf(b) / a.isDisjointFrom(b) | Boolean |
const tags = new Set(['js', 'css', 'js', NaN, NaN]).add({}).add({});
console.log(tags.size, [...new Set('banana')].join(''));
const odds = new Set([1, 3, 5, 7]);
const primes = new Set([2, 3, 5, 7]);
console.log(odds.union(primes), odds.intersection(primes));
console.log(odds.difference(primes), odds.symmetricDifference(primes));
console.log(new Set([3, 5]).isSubsetOf(odds), odds.isDisjointFrom(new Map([[2, 'x']])));
const visited = new WeakSet([odds]); // objects only, held weakly
console.log(visited.has(odds), visited.has(new Set([1, 3, 5, 7])));5 ban
Set(5) { 1, 3, 5, 7, 2 } Set(3) { 3, 5, 7 }
Set(1) { 1 } Set(2) { 1, 2 }
true true
true falseTest equality with a.size === b.size && a.isSubsetOf(b). The methods return new sets and never mutate a.