Оператор рівності (==
) перевіряє, чи два операнди рівні, повертаючи результат типу Boolean. На відміну від оператору строгої рівності, він намагається перетворити для порівняння операнди, які належать до різних типів.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
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
Специфікації
Сумісність з веб-переглядачами
BCD tables only load in the browser