Слабка (==) проти суворої (===) рівності в JavaScript
== vs === в JavaScript
JavaScript має два оператори рівності: слабка рівність (==) та сильна рівність (===). Розуміння різниці між ними є важливим для написання надійного коду.
Сильна рівність (===)
Порівнює значення І тип. Не виконується приведення типів.
javascript
5 === 5; // true
5 === "5"; // false (різні типи)
true === 1; // false
null === undefined; // false
NaN === NaN; // false (NaN ніколи не дорівнює самому собі)Слабка рівність (==)
Порівнює значення після приведення типів. JavaScript перетворює операнди до одного типу перед порівнянням.
javascript
5 == "5"; // true (рядок "5" → число 5)
true == 1; // true (true → 1)
false == 0; // true (false → 0)
null == undefined; // true (спеціальне правило)
"" == 0; // true ("" → 0)
"0" == false; // true ("0" → 0, false → 0)Правила приведення для ==
| Порівняння | Приведення | Результат |
|---|---|---|
number == string | Рядок → Число | 5 == "5" → true |
boolean == any | Boolean → Число спочатку | true == "1" → true |
null == undefined | Завжди true | Спеціальне правило |
null == 0 | Завжди false | null тільки == undefined |
object == primitive | Об'єкт → примітив через valueOf/toString |
Порівняння об'єктів
Як ==, так і === порівнюють об'єкти по посиланню, а не по значенню:
javascript
const a = { x: 1 };
const b = { x: 1 };
const c = a;
a === b; // false (різні посилання)
a === c; // true (одне й те саме посилання)
a == b; // false (також по посиланню)
[] == []; // false
{} == {}; // falseСпеціальні випадки
javascript
NaN === NaN; // false
NaN == NaN; // false
// Використовуйте Number.isNaN() або Object.is() замість
Object.is(NaN, NaN); // true
Object.is(+0, -0); // false (=== дає true)Коли використовувати який
| Оператор | Використовуйте, коли |
|---|---|
=== | Завжди (за замовчуванням) |
== | Тільки при перевірці null == undefined |
javascript
// ✅ Загальний шаблон: перевірка на null АБО undefined
if (value == null) {
// value є null або undefined
}
// Те ж саме, що й:
if (value === null || value === undefined) {
// value є null або undefined
}Важливо:
Завжди використовуйте === за замовчуванням. Єдине широко прийняте використання == — це перевірка на null/undefined в одному порівнянні: if (value == null). Правило ESLint eqeqeq забезпечує дотримання цієї найкращої практики.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.