Операторы сравнения
Операторы сравнения
Технический фундамент сравнений
Сравнение задает логику ветвления, поэтому требует строгости:
- результат сравнения всегда булев (
true/false); - строгие и нестрогие проверки дают разные гарантии;
- сравнение строк и чисел без нормализации может искажать бизнес-логику;
- граничные значения определяют корректность условий не меньше, чем «обычные» кейсы.
Точное сравнение — основа безопасных условий доступа, валидации и фильтрации.
Почему сравнения решают судьбу условий
Операторы сравнения дают ответ true или false, а на этих ответах строятся все ветки логики: доступ к странице, результат валидации, фильтрация списка, статус шага. Ошибся в сравнении - получаешь неверное поведение при корректных данных.
Ключевой момент: сравнение не меняет данные, а проверяет отношение между ними.
Проверь себя: почему разница между == и === критична для безопасности условий?
Основные операторы сравнения
>больше;<меньше;>=больше или равно;<=меньше или равно;==нестрогое равенство (с приведением типов);===строгое равенство (без приведения);!=,!==неравенство.
const score = 70;
console.log(score >= 70); // true
console.log(score < 70); // false
Смотри, что важно: для прикладной логики почти всегда предпочтительнее === и !==.
Нестрогое vs строгое равенство
console.log(5 == '5'); // true
console.log(5 === '5'); // false
Нестрогое сравнение приводит типы и часто дает неочевидные результаты.
console.log(false == 0); // true
console.log('' == 0); // true
console.log(null == undefined); // true
Здесь часто путаются и получают "странно сработавший" if.
Анти-провал: используй ===, если нет очень конкретной причины для ==.
Сравнение строк
Строки сравниваются лексикографически (по кодам символов).
console.log('b' > 'a'); // true
console.log('10' > '2'); // false
Для числовых данных в строках сначала делай Number(...).
Проверь себя: почему '10' > '2' дает неожиданный результат для новичка?
Мини-сценарий: доступ по возрасту
function canRegister(rawAge) {
const age = Number(rawAge);
if (Number.isNaN(age)) return false;
return age >= 18;
}
Здесь сравнение работает корректно только после приведения типа.
Если сравнивать строку напрямую, бизнес-логика может дать неверный ответ.
Частые ошибки новичков
- Писать
=вместо===в условии. - Использовать
==с разными типами без понимания приведения. - Сравнивать строковые числа как числа.
- Не учитывать граничные значения (
>=vs>).
Анти-провал: для каждого условия явно проверь граничные кейсы (17, 18, 19).
Что будет, если изменить входные данные
Для canRegister:
'18'->trueпослеNumber;'abc'->falseиз-заNaN;'017'->false(17);18->true.
Такой подход делает сравнение предсказуемым независимо от формы входа.
Проверь себя: почему полезно явно обрабатывать NaN до любого сравнения?
Краткий итог
- Операторы сравнения дают булев результат для ветвления логики.
- Для надежного кода лучше использовать строгие сравнения
===/!==. - Приведение типов в
==может давать неожиданные эффекты. - Сравнение строк и чисел требует осознанного контроля типа.
- Грамотно настроенные сравнения - основа корректных условий в приложении.