Сравнение
Сравнение отвечает на вопрос «да или нет»: больше ли сумма заказа ста долларов, совпадает ли пароль, исполнилось ли пользователю 18. Результат сравнения — всегда логическое значение true или false.
Операторы сравнения
Самое простое сравнение — «больше»:
console.log(5 > 3); // true| Оператор | Значение | Пример | Результат |
|---|---|---|---|
> | больше | 5 > 3 | true |
< | меньше | 5 < 3 | false |
>= | больше или равно | 5 >= 5 | true |
<= | меньше или равно | 4 <= 3 | false |
=== | равно | 5 === 5 | true |
!== | не равно | 5 !== 3 | true |
Строгое равенство
Оператор === проверяет, что значения совпадают и имеют одинаковый тип. Поэтому число 5 и строка '5' не равны:
console.log(5 === '5'); // falseОбратите внимание: равенство записывается тремя знаками =. Один знак = — это присваивание, а не сравнение.
Нестрогое равенство
В JavaScript есть и старый оператор ==. Перед сравнением он приводит значения к одному типу, и это даёт неожиданные результаты:
console.log('5' == 5); // true
console.log(0 == ''); // trueИз-за таких сюрпризов в современном коде используют только === и !==. Пара == и != встречается разве что в старых программах.
Результат можно сохранить
Сравнение — обычное выражение, и его результат можно положить в переменную. Такие переменные принято называть с is или has в начале:
const age = 20;
const isAdult = age >= 18;
console.log(isAdult); // trueДальше такую переменную используют в условиях — об этом в следующей главе.
Сравнение строк
Строки сравниваются посимвольно, по алфавиту: буква, которая стоит дальше в алфавите, считается «больше». Заглавные буквы при этом меньше строчных:
console.log('кот' > 'кит'); // true
console.log('Анна' === 'анна'); // falseЧтобы сравнить строки без учёта регистра, приведите обе к одному регистру: a.toLowerCase() === b.toLowerCase().
NaN не равно ничему
Особое значение NaN не равно ничему, даже самому себе. Поэтому проверка x === NaN всегда даёт false:
console.log(NaN === NaN); // false
console.log(Number.isNaN(NaN)); // trueДля проверки на NaN используйте функцию Number.isNaN().
Частая ошибка
Числа, записанные строками, сравниваются как текст — по первому символу, а не по величине. Символ '1' меньше '9', поэтому '10' оказывается меньше '9':
console.log('10' < '9'); // true
console.log(Number('10') < Number('9')); // falseЗначения из форм и файлов приходят строками, поэтому перед сравнением превращайте их в числа.