Операторы сравнения JavaScript
- Больше/меньше: a > b, a < b.
- Больше/меньше или равно: a >= b, a <= b.
- Равно: a == b (нестрогое равенство; помните, что один знак равенства a = b означает присваивание).
- Равно: a === b (строгое равенство, предпочтительно для использования! см. ниже).
- Не равно: a != b, a !== b (нестрогое и строгое неравенство; в математике обозначается символом ≠).
Операторы сравнения, как и другие операторы, возвращают значение. Но это значение имеет логический тип:
- true – означает «да», «верно», «истина»;
- false – означает «нет», «неверно», «ложь».
Следующие значения являются ложными:
- false
- undefined
- null
- 0 (ноль)
- NaN
- пустая строка ( "" ).
Все остальные значения при передаче в условное выражение, включая все объекты, будут восприняты как ИСТИНА (TRUE).
1 2 3 4 5 6 7 8 9 10 11 12 |
alert( 2 > 1 ); // true (верно) alert( 2 == 1 ); // false (неверно) alert( 2 != 1 ); // true (верно) let a = NaN; if (a) { console.log(a); // метод будет пропущен, т.к. NaN будет преобразовано в false } a = 1; if (a) { console.log(a); // 1 } |
Результат сравнения можно присвоить переменной, как и любое значение:
1 2 |
let result = 5 > 4; // true, результат сравнения присваивается переменной result alert( result ); // true |
Сравнение строк в JavaScript
Cтроки в JavaScript сравниваются посимвольно (используется «алфавитный» или «лексикографический» порядок), при этом:
- используется кодировка Unicode, а не настоящий алфавит;
- имеет значение регистр символов (заглавная "A" меньше "a", так как строчные буквы имеют больший код в Unicode).
Алгоритм сравнения строк в JS:
- Сравниваются первые символы строк.
- Если первый символ первой строки больше (меньше), чем первый символ второй, то первая строка больше (меньше) второй.
- Если первые символы равны, то таким же образом сравниваются вторые символы строк.
- Сравнение продолжается, пока не закончится одна из строк. Большей считается более длинная строка.
- Если обе строки заканчиваются одновременно, то они равны.
1 2 3 |
alert( 'Я' > 'А' ); // true alert( 'Кот' > 'Код' ); // true alert( 'Сонный' > 'Сон' ); // true |
Сравнение данных разных типов JS
При сравнении значений разных типов JavaScript приводит каждое из них к числу (number).
1 2 3 4 5 6 7 8 9 |
alert( '2' > 1 ); // true, строка '2' становится числом 2 alert( '01' == 1 ); // true, строка '01' становится числом 1 (нестрогое сравнение!) // НО: alert( '01' === 1 ); // false, строка '01' НЕ становится числом 1 (строгое сравнение!) // Логическое значение true становится 1, а false – 0 alert( true == 1 ); // true alert( false == 0 ); // true |
Оператор строгого равенства === проверяет равенство без приведения типов.
При нестрогом сравнении возможна ситуация, когда два значения разных типов равны, при этом:
- одно из них как логическое значение - true;
- другое - false.
1 2 3 4 5 6 7 |
let a = 0; alert( Boolean(a) ); // false let b = "0"; alert( Boolean(b) ); // true alert(a == b); // true |
Таким образом, использование обычного сравнения == может вызывать проблемы (например, оно не отличает 0 от false):
1 2 3 |
alert( 0 == false ); // true // или alert( '' == false ); // true |
Для исключения подобной ситуации используют оператор строгого равенства ===, который проверяет равенство без приведения типов.
Другими словами, если a и b имеют разные типы, то проверка a === b немедленно возвращает false без попытки их преобразования.
1 |
alert( 0 === false ); // false, так как сравниваются разные типы |
Сравнение с null и undefined
Специальное правило языка JavaScript:
- При строгом равенстве === значения null и undefined различны, так как различны их типы.
- При нестрогом равенстве == значения null и undefined равны друг другу и не равны никаким другим значениям.
- При использовании математических операторов и других операторов сравнения < > <= >= значения null и undefined преобразуются к числам:
- null - 0;
- undefined – NaN.
1 2 3 |
alert( null === undefined ); // false alert( null == undefined ); // true |
Сравнение null и 0:
1 2 3 |
alert( null > 0 ); // false, т.к. сравнение преобразует null в число (см. выше) alert( null == 0 ); // false, т.к. null равен null или undefined, и ничему другому alert( null >= 0 ); // true, т.к. сравнение преобразует null в число |
Несравнимое значение undefined:
Значение undefined несравнимо с другими значениями:
1 2 3 |
alert( undefined > 0 ); // false, undefined преобразуется в NaN alert( undefined < 0 ); // false, undefined преобразуется в NaN alert( undefined == 0 ); // false, undefined равно только null и ничему другому |
ВАЖНО! К любому сравнению с undefined или null, кроме строгого равенства ===, нужно относиться с осторожностью! Не используйте сравнения >= > < <= с переменными, которые могут принимать значения null или undefined, если вы не уверены в том, что делаете. Если переменная может принимать эти значения, то добавьте для них отдельные проверки.