← Назад ко всем вопросам

Как Set сравнивает объекты

1️⃣ Как кратко ответить

Set сравнивает объекты по ссылке, а не по значению. Это значит, что два объекта считаются равными в Set только если они ссылаются на один и тот же объект в памяти.

2️⃣ Подробное объяснение темы

Set — это структура данных в JavaScript, которая позволяет хранить уникальные значения любого типа, будь то примитивные значения или объекты. Однако, когда речь идет о сравнивании объектов, Set использует сравнение по ссылке.

Сравнение по ссылке

В JavaScript объекты сравниваются по ссылке, а не по значению. Это значит, что два объекта считаются равными только если они ссылаются на один и тот же объект в памяти. Например:

const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;
​
console.log(obj1 === obj2); // false, разные объекты в памяти
console.log(obj1 === obj3); // true, обе переменные ссылаются на один и тот же объект

Как это работает в Set

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

Пример использования Set с объектами

const set = new Set();
​
const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;
​
set.add(obj1);
set.add(obj2);
set.add(obj3);
​
console.log(set.size); // 2
  • const set = new Set(); — создаем новый экземпляр Set.
  • const obj1 = { a: 1 }; — создаем объект obj1.
  • const obj2 = { a: 1 }; — создаем другой объект obj2 с теми же значениями, но это другой объект в памяти.
  • const obj3 = obj1;obj3 ссылается на тот же объект, что и obj1.
  • set.add(obj1); — добавляем obj1 в Set.
  • set.add(obj2); — пытаемся добавить obj2, но он добавится, так как это другой объект.
  • set.add(obj3);obj3 не добавится, так как он ссылается на тот же объект, что и obj1.

Зачем это нужно

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

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки