--- title: Оператори порівняння slug: Web/JavaScript/Reference/Operators/Оператори_порівняння tags: - JavaScript - Довідка - Оператор translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators ---
JavaScript має як строге порівняння, так і порівняння з перетворенням типів. Строге порівняння (===) є істинним лише в тому випадку, якщо операнди мають однаковий тип, а їхній зміст співпадає. Найчастіше вживане абстрактне порівняння (==) приводить операнди до спільного типу перед виконанням порівняння. Для абстрактних порівнянь (наприклад, <=) операнди спочатку приводяться до простих типів, потім приводяться до спільного типу, а вже тоді порівнюються.
Рядки порівнюються на основі стандартного лексикографічного упорядкування, використовуючи значення Unicode.
{{EmbedInteractiveExample("pages/js/expressions-comparisonoperators.html")}}
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.
Особливості порівнянь:
true, або обидва є false.Оператор рівності перетворює операнди, якщо вони не однакового типу, і після цього застосовує строге порівняння. Якщо обидва операнди є об'єктами, 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")}} наступним чином:
Number. Спочатку математичне значення виводиться з рядкового літерала. Далі ця величина округлюється до найближчого значення типу Number.Boolean, цей операнд конвертується у 1, якщо він дорівнює true, і у +0, якщо він дорівнює false.число, використовуючи методи об'єктів valueOf та toString. Якщо спроба перетворення була невдалою, генерується помилка виконання.// 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")}}