Попробуйте выполнить проверку на {name: 'John'} === {name: 'John'}
. Вы обнаружите, что он возвращает false.
Каждый новый объект имеет другую ссылку, даже если содержимое может быть таким же. Если он дает вам false, Set
также будет рассматривать его как другой элемент.
Когда вы назначаете переменной значение Reference, ее ячейка памяти копируется.
Например:
let john = {name: 'John'} // lets say memory: XYZ
Итак, каждый раз, когда вы делаете: set.add(john);
, вы добавляете ячейку памяти в набор. Итак, набор будет видеть, что вы добавляете XYZ
каждый раз, и он не будет принимать дубликаты.
Во втором случае, когда вы это сделаете:
`set1.add({ name: "John" });` // You added maybe XYF
`set1.add({ name: "John" });` // You added maybe XYN
Итак, ваш набор обрабатывает их по-разному и складывает их обоих.