Как 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 для хранения уникальных объектов может быть полезно, когда необходимо избежать дублирования данных. Однако важно помнить, что уникальность объектов определяется их ссылкой, а не значением. Это значит, что даже если два объекта имеют одинаковые свойства и значения, они будут считаться разными, если они не ссылаются на один и тот же объект в памяти.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться