Операторы сравнения

Операторы сравнения

Технический фундамент сравнений

Сравнение задает логику ветвления, поэтому требует строгости:

  • результат сравнения всегда булев (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 до любого сравнения?

Краткий итог

  • Операторы сравнения дают булев результат для ветвления логики.
  • Для надежного кода лучше использовать строгие сравнения ===/!==.
  • Приведение типов в == может давать неожиданные эффекты.
  • Сравнение строк и чисел требует осознанного контроля типа.
  • Грамотно настроенные сравнения - основа корректных условий в приложении.