--- title: Оператори порівняння slug: Web/JavaScript/Reference/Operators/Оператори_порівняння tags: - JavaScript - Довідка - Оператор translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators ---
{{jsSidebar("Operators")}}

JavaScript має як строге порівняння, так і порівняння з перетворенням типів. Строге порівняння (===) є істинним лише в тому випадку, якщо операнди мають однаковий тип, а їхній зміст співпадає. Найчастіше вживане абстрактне порівняння (==) приводить операнди до спільного типу перед виконанням порівняння. Для абстрактних порівнянь (наприклад, <=) операнди спочатку приводяться до простих типів, потім приводяться до спільного типу, а вже тоді порівнюються.

Рядки порівнюються на основі стандартного лексикографічного упорядкування, використовуючи значення Unicode.

{{EmbedInteractiveExample("pages/js/expressions-comparisonoperators.html")}}

Особливості порівнянь:

Оператори рівності

Рівність (==)

Оператор рівності перетворює операнди, якщо вони не однакового типу, і після цього застосовує строге порівняння. Якщо обидва операнди є об'єктами, JavaScript порівнює внутрішні посилання, які є рівними, якщо операнди посилаються на один і той самий об'єкт у пам'яті.

Синтаксис

x == y

Приклади

1    ==  1         // true
'1'  ==  1         // true
1    == '1'        // true
0    == false      // true
0    == null       // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1.key == object2.key // true
0    == undefined  // false
null == undefined  // true

Нерівність (!=)

Оператор нерівності повертає true,  якщо операнди не є рівними. Якщо два операнда не належать до одного типу, JavaScript намагається привести операнди до відповідного типу для порівняння. Якщо обидва операнда є об'єктами, JavaScript порівнює внутрішні посилання, які є нерівними, якщо операнди посилаються на різні об'єкти у пам'яті.

Синтаксис

x != y

Приклади

1 !=   2     // true
1 !=  '1'    // false
1 !=  "1"    // false
1 !=  true   // false
0 !=  false  // false

Ідентичність / строга рівність (===)

Оператор ідентичності повертає true, якщо операнди строго рівні (див. вище) без приведення типів

Синтаксис

x === y

Приклади

3 === 3   // true
3 === '3' // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1 === object2 //false

Неідентичність / строга нерівність (!==)

Оператор неідентичності повертає true, якщо операнди не є рівними та/або не однакового типу.

Синтаксис

x !== y

Приклади

3 !== '3' // true
4 !== 3   // true

Оператори відношення

Кожен з цих операторів буде примусово приведений до простої величини перед порівнянням. Якщо обидва перетворюються на рядки, вони порівнюються з використанням лексикографічного порядку, інакше вони будуть перетворені на числа для порівняння. Порівняння із NaN завжди поверне false.

Більше ніж (>)

Оператор більше ніж повертає true, якщо значення лівого операнда більше за значення правого операнда.

Синтаксис

x > y

Приклади

4 > 3 // true

Більше чи дорівнює (>=)

Оператор більше чи дорівнює повертає true, якщо значення лівого операнда більше, або дорівнює значенню правого операнда.

Синтаксис

 x >= y

Приклади

4 >= 3 // true
3 >= 3 // true

Менше ніж (<)

Оператор менше ніж повертає true, якщо значення лівого операнда менше значення правого операнда.

Синтаксис

 x < y

Приклади

3 < 4 // true

Менше чи дорівнює (<=)

Оператор менше чи дорівнює повертає true, якщо значення лівого операнда менше або дорівнює значенню правого операнда.

Синтаксис

 x <= y

Приклади

3 <= 4 // true

Застосування операторів порівняння

Стандартні оператори рівності (== та !=) використовують алгоритм абстрактної рівності для порівняння двох операндів. Якщо операнди належать до різних типів, алгоритм спробує привести їх до спільного типу перед порівнянням; наприклад, у виразі 5 == '5', рядок праворуч буде приведений до {{jsxref("Число","числа")}} перед здійсненням порівняння.

Оператори строгої рівності (=== та !==) використовують алгоритм строгої рівності та призначені для виконання перевірки рівності операндів одного типу. Якщо операнди належать до різних типів, результат завжди буде false, тому 5 !== '5'.

Використовуйте оператори строгого порівняння, якщо операнди мають належати до вказаного типу, як і їх значення, або, якщо конкретний тип операндів має значення. Інакше, використовуйте стандартні оператори рівності, які дозволяють перевіряти ідентичність двох операндів, навіть якщо вони не належать до одного типу.

Коли в порівнянні застосовується перетворення типів (тобто, це не строге порівняння), JavaScript перетворює типи операндів {{jsxref ("String")}}, {{jsxref ("Число","Number")}}, {{jsxref ("Boolean" )}} або {{jsxref ("Object")}} наступним чином:

Заувага: Рядкові об'єкти є об'єктами типу Object, а не String! Об'єкти типу String використовуються рідко, а отже, наведені нижче результати можуть бути несподіваними:
// true, оскільки обидва операнди мають тип String (є рядковими примітивами):
'foo' === 'foo'

var a = new String('foo');
var b = new String('foo');

// false, оскільки a та b мають тип Object і посилаються на різні об'єкти
a == b

// false, оскільки a та b мають тип Object і посилаються на різні об'єкти
a === b

// true, оскільки a та 'foo' мають різні типи, але об'єкт (а)
// перетворюється на рядок 'foo' перед порівнянням
a == 'foo'

Специфікації

Специфікація Статус Коментар
{{SpecName('ES1')}} {{Spec2('ES1')}} Початкове визначення. Реалізовано у JavaScript 1.0
{{SpecName('ES3')}} {{Spec2('ES3')}} Додані оператори === та !== . Реалізовано у JavaScript 1.3
{{SpecName('ES5.1', '#sec-11.8')}} {{Spec2('ES5.1')}} Дано визначення у декільках секціях специфікації: Оператори відношення, Оператори рівності
{{SpecName('ES6', '#sec-relational-operators')}} {{Spec2('ES6')}} Дано визначення у декільках секціях специфікації: Оператори відношення, Оператори рівності
{{SpecName('ESDraft', '#sec-relational-operators')}} {{Spec2('ESDraft')}} Дано визначення у декільках секціях специфікації: Оператори відношення, Оператори рівності

Підтримка веб-переглядачами

{{Compat("javascript.operators.comparison")}}

Див. також