Оператор рівності (==) перевіряє, чи два операнди рівні, повертаючи результат типу Boolean. На відміну від оператору строгої рівності, він намагається перетворити для порівняння операнди, які належать до різних типів.
Синтаксис
x == y
Опис
Оператори рівності (== та !=) використовують алгоритм абстрактної рівності для порівняння двох операндів. Його можна загалом описати наступним чином:
- Якщо обидва операнди є об'єктами, повертати
trueтільки якщо обидва операнди посилаються на той самий об'єкт. - Якщо один операнд дорівнює
null, а іншийundefined, повертатиtrue. - Якщо операнди належать до різних типів, спробувати привести їх до одного типу перед порівнянням:
- При порівнянні числа з рядком спробувати перетворити рядок у числове значення.
- Якщо один з операндів є типом
Boolean, перетворити операнд Boolean на 1, якщо він дорівнюєtrue, і на +0, якщо він дорівнюєfalse. - Якщо один з операндів є об'єктом, а інший числом або рядком, спробувати перетворити об'єкт на примітив за допомогою методів об'єкта
valueOf()таtoString().
- Якщо операнди належать до одного типу, вони порівнюються наступним чином:
String: повернутиtrueтільки якщо обидва операнди мають однакові символи у однаковому порядку.Number: повернутиtrueтільки якщо обидва операнди мають однакове значення.+0та-0вважаються однаковим значенням. Якщо будь-який з операндів єNaN, повернутиfalse.Boolean: повернутиtrueтільки якщо обидва операнди дорівнюютьtrueабо обидва дорівнюютьfalse.
Найбільш помітна відмінність між цим оператором та оператором строгої рівності (===) полягає в тому, що оператор строгої рівності не намагається виконувати перетворення типів. Натомість, оператор строгої рівності завжди вважає операнди різних типів різними.
Приклади
Порівняння без перетворення типів
1 == 1; // true "привіт" == "привіт"; // true
Порівняння з перетворенням типів
"1" == 1; // true 1 == "1"; // true 0 == false; // true 0 == null; // false 0 == undefined; // false null == undefined; // true const number1 = new Number(3); const number2 = new Number(3); number1 == 3; // true number1 == number2; // false
Порівняння об'єктів
const object1 = {"key": "value"}
const object2 = {"key": "value"};
object1 == object2 // false
object2 == object2 // true
Порівняння рядків та об'єктів String
Зауважте, що рядки, створені за допомогою new String(), є об'єктами. Якщо ви порівняєте один з них з рядковим літералом, об'єкт String буде перетворений на рядковий літерал, і їхній вміст буде порівнюватись. Однак, якщо обидва операнди є об'єктами String, вони порівнюються як об'єкти та мусять посилатись на один і той самий об'єкт, щоб вважатись однаковими:
const string1 = "привіт";
const string2 = String("привіт");
const string3 = new String("привіт");
const string4 = new String("привіт");
console.log(string1 == string2); // true
console.log(string1 == string3); // true
console.log(string2 == string3); // true
console.log(string3 == string4); // false
console.log(string4 == string4); // true
Порівняння дат та рядків
const d = new Date('December 17, 1995 03:24:00');
const s = d.toString(); // наприклад: "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"
console.log(d == s); //true
Специфікації
| Специфікація |
|---|
| ECMAScript (ECMA-262) The definition of 'Equality operators' in that specification. |
Сумісність з веб-переглядачами
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Equality (a == b) | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Legend
- Full support
- Full support