new Set([{}]).union(new Set([9])); // leaked the {} element new Set([{}]).symmetricDifference(new Set([9])); // same // symmetricDifference: element only reachable via the setlike iterator new Set([1]).symmetricDifference(new Set([{}])); // intersection, |this| larger than the argument: iterates the argument's keys var o1 = {}; new Set([o1, 1, 2]).intersection(new Set([o1])); // intersection, |this| not larger: iterates |this| and probes with .has() var o2 = {}; new Set([o2]).intersection(new Set([o2, 1, 2])); // difference, |this| not larger: iterates |this| and keeps the misses new Set([{}]).difference(new Set([9]));