Каким образом в Set попали не уникальные значения?

В TypeScript, как и в JavaScript, тип данных Set представляет собой коллекцию уникальных значений любого типа. Когда вы добавляете элементы в Set, они автоматически проверяются на уникальность, и дублирующиеся значения не сохраняются в коллекции. Однако, может возникнуть ситуация, когда в Set попадут не уникальные значения.

Вот несколько способов, которыми неправильные или неуникальные значения могут попасть в Set:

1. Отправка значения в Set с использованием некорректного оператора присваивания. Например, вместо оператора "=" был использован оператор "==" или "===" - это может привести к добавлению значения в Set, несмотря на его уже наличие.

Пример:

const set = new Set();
let value = "test";
set.add(value);
set.add(value); // значение "test" будет добавлено в Set дважды, так как был использован некорректный оператор присваивания

2. Использование ссылочного типа данных. Set проверяет уникальность значений с помощью алгоритма сравнения, основанного на идентичности объектов. Если вы добавляете объекты в Set, они будут сравниваться по ссылкам, а не по значению. Поэтому, если добавляемые объекты имеют разные ссылки, но содержат одинаковое значение, то они считаются различными и могут быть добавлены в Set.

Пример:

const set = new Set();
let obj1 = { value: "test" };
let obj2 = { value: "test" };
set.add(obj1);
set.add(obj2); // обе ссылки разные, хотя значения идентичны, поэтому оба объекта будут добавлены в Set

3. Использование примитивных типов данных, но с некорректным сочетанием операторов и функций.

Пример:

const set = new Set();
let str1 = "test";
let str2 = new String("test");
set.add(str1);
set.add(str2); // str2 является объектом типа String, и поэтому будет добавлен в Set, несмотря на то, что строночное значение у него идентично str1

Когда в Set попадают неуникальные значения, дублирующиеся элементы всегда будут проигнорированы и не сохранятся в коллекции. Set остается служить набором уникальных значений.