Объекты в JavaScript сравниваются по ссылке, а не по содержимому. Операторы == и === возвращают true только если оба операнда ссылаются на один и тот же объект в памяти. Даже если объекты выглядят одинаково, они не равны, если это разные объекты.
В JavaScript объекты сравниваются не так, как примитивные значения. Важно понимать, как работает сравнение, чтобы избежать ошибок.
Объекты сравниваются по ссылке, а не по значению:
const obj1 = { name: 'Иван' };
const obj2 = { name: 'Иван' };
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // falseconst obj1 = { a: 1 };
const obj2 = { a: 1 };
// obj1 и obj2 — разные объекты в памяти
console.log(obj1 === obj2); // falseconst obj1 = { a: 1 };
const obj2 = obj1; // Одна и та же ссылка
console.log(obj1 === obj2); // trueconst user1 = { name: 'Иван', age: 25 };
const user2 = { name: 'Иван', age: 25 };
// Даже с одинаковыми данными — не равны
console.log(user1 === user2); // falseconst user = { name: 'Иван' };
const sameUser = user; // Та же ссылка
console.log(user === sameUser); // true
console.log(user === { name: 'Иван' }); // falseconst obj1 = { a: 1 };
const obj2 = { a: 1 };
// С объектами == и === работают одинаково
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // falseconst obj = { a: 1 };
console.log(obj == null); // false
console.log(obj === null); // false
console.log(obj == undefined); // false
console.log(obj === undefined); // falseconst user = { name: 'Иван' };
const admin = user; // Та же ссылка
console.log(user === admin); // true
admin.name = 'Петр';
console.log(user.name); // 'Петр' — это один и тот же объектlet obj1 = { a: 1 };
let obj2 = obj1;
console.log(obj1 === obj2); // true
obj2 = { a: 1 }; // Новый объект
console.log(obj1 === obj2); // false// ❌ Думаем, что объекты с одинаковыми данными равны
const obj1 = { name: 'Иван' };
const obj2 = { name: 'Иван' };
if (obj1 === obj2) {
console.log('Равны'); // Не сработает
}
// ✅ Правильное понимание
console.log(obj1 === obj2); // false// ❌ Сравнение объекта с примитивом
const obj = { toString() { return 'test'; } };
console.log(obj == 'test'); // true (преобразование)
console.log(obj === 'test'); // false (разные типы)Понимание сравнения объектов помогает избежать ошибок при работе с данными и условиями в коде.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪