Gernar
Frontend DeveloperJavaScript

Интервью-вопрос

Что будет, если 1 разделить на 0

В JavaScript 1 / 0 вернет Infinity. Важно не только назвать результат, но и объяснить, почему это опасно для UI, расчетов и данных, которые уходят наружу.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше ответить на вопрос про 1 / 0?

Вы хотите дать короткий и технически точный ответ на интервью.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Короткий ответ: в JavaScript 1 / 0 возвращает Infinity. Это значение типа number. Код после такого выражения продолжит выполняться.

При этом математически деление на ноль не становится корректным. JavaScript просто следует правилам чисел с плавающей точкой. Для ненулевого числа деление на ноль дает бесконечность с нужным знаком.

На интервью важно не остановиться на слове Infinity. Добавьте соседние случаи: -1 / 0 даст -Infinity, а 0 / 0 даст NaN.

Что сказать на интервью

Удобная формулировка:

В JavaScript 1 / 0 вернет Infinity, потому что Number работает по правилам IEEE 754. Ошибки не будет. Но это не значит, что результат валиден для приложения. Если значение может попасть в интерфейс, аналитику или запрос, я проверю знаменатель и итог через Number.isFinite.

Такой ответ звучит сильнее, чем просто "будет Infinity". Он показывает, что вы знаете поведение языка и понимаете практический риск.

Какие результаты нужно различать

Что может попасть во frontend-код

Ненулевое число / 0Infinity или -Infinity

Не показывайте это как нормальный результат. Проверьте знак и замените значение на понятное состояние, если расчет невозможен.

0 / 0NaN

Это неопределенный результат. Проверяйте Number.isNaN или Number.isFinite. Иначе NaN может испортить следующие вычисления.

Число / очень маленькое значениеБольшое число

Формально это не деление на ноль. Но для UI такой результат тоже может быть опасным. Нужны ограничения, округление или валидация.

Отправка в JSONnull

Infinity, -Infinity и NaN при сериализации станут null. Нормализуйте значение до отправки, чтобы не потерять смысл данных тихо.

Главная ловушка в том, что разные плохие значения ломают код по-разному. Infinity может пройти дальше как число. NaN может испортить следующие вычисления. При сериализации оба значения могут стать null.

Поэтому для UI обычно важен не только знаменатель, но и финальный результат. Если результат не конечный, лучше показать понятный fallback, отключить кнопку расчета или попросить пользователя исправить данные.

Безопасная обработка в компоненте

Плохой вариант: просто посчитать и вывести результат.

function Ratio({ current, total }) {
  const percent = (current / total) * 100;

  return <span>{percent.toFixed(1)}%</span>;
}

Если total равен 0, пользователь может увидеть Infinity% или NaN%. Если это же значение пойдет в ширину прогресс-бара, сортировку или aria-valuenow, UI станет неверным и менее доступным.

Более безопасный вариант:

function Ratio({ current, total }) {
  if (!Number.isFinite(current) || !Number.isFinite(total) || total === 0) {
    return <span role="status">Недостаточно данных</span>;
  }

  const percent = (current / total) * 100;

  if (!Number.isFinite(percent)) {
    return <span role="status">Недостаточно данных</span>;
  }

  return <span>{percent.toFixed(1)}%</span>;
}

Здесь расчет не выполняется для нечисловых входов и нулевого знаменателя. Fallback виден пользователю и объявляется как статус, если значение меняется после ввода или загрузки данных.

Если знаменатель приходит из формы, добавьте валидацию до расчета и не полагайтесь на неявное приведение строк к числу. Если значение приходит из API, не доверяйте ему вслепую. Проверьте тип и конечность числа перед использованием.

Как выбрать безопасное действие

Как отвечать и что делать в коде

1Вы отвечаете коротко на интервью?
Скажите: в JavaScript 1 / 0 даст Infinity, но математически деление на ноль не определено.
2Результат идет в интерфейс?
Проверяйте Number.isFinite и показывайте понятное состояние вместо Infinity или NaN.
3Значение уходит на backend или в аналитику?
Нормализуйте результат явно, потому что JSON.stringify превратит Infinity и NaN в null.
4Знаменатель приходит от пользователя или API?
Валидируйте входные данные до вычисления. Отдельно обработайте ноль, -0, null и пустую строку.

Проверка denominator === 0 полезна, но не всегда достаточна. Во frontend часто есть строки из инпутов, пустые значения, null, undefined и уже готовые результаты от API.

Поэтому надежный подход такой: валидируйте входные данные, выполните расчет, затем проверьте итог. Для результата лучше подходит Number.isFinite, потому что он отсекает и Infinity, и -Infinity, и NaN.

Почему это важно именно во frontend

Во frontend некорректное число часто не падает сразу. Оно портит пользовательский сценарий. Например, Infinity может попасть в подпись графика, ширину прогресс-бара, сортировку таблицы, цену за единицу или событие аналитики.

Еще один риск связан с отправкой данных. Если объект содержит Infinity или NaN, при JSON.stringify эти значения внутри объекта и массива станут null. Backend может принять запрос, но смысл поля будет потерян.

Поэтому на интервью полезно связать ответ с реальной практикой. Вы знаете, что JS не упадет, поэтому сами проверяете границы и не пропускаете невалидные числовые значения дальше.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Путать Infinity и NaN

    1 / 0 дает Infinity, а 0 / 0 дает NaN. Если назвать оба случая NaN, ответ будет звучать неточно. Лучше сразу разделить эти результаты и объяснить, где каждый появляется.
  2. 2

    Думать, что программа упадет

    В JavaScript обычное деление на ноль не выбрасывает исключение. Код продолжит выполняться. В этом и есть риск: некорректное значение может попасть в UI, график, сортировку или запрос. Безопаснее явно валидировать знаменатель и проверять итог через Number.isFinite.
  3. 3

    Показывать Infinity пользователю

    Для пользователя Infinity почти всегда выглядит как баг. В процентах, цене за единицу или скорости загрузки это не полезный результат. Лучше показать текст вроде "недостаточно данных" или запретить расчет, пока знаменатель равен нулю.
  4. 4

    Проверять только denominator === 0

    Такая проверка не ловит NaN, Infinity, строковые значения и ошибки парсинга. Если данные приходят из формы или API, сначала приведите их к числам. Потом проверьте Number.isFinite для входных данных и результата.
  5. 5

    Забывать про JSON.stringify

    Если отправить объект с Infinity или NaN через JSON, значение станет null. Это тихая ошибка. Backend может принять данные, но смысл расчета потеряется. Лучше заменить результат на явный статус или не отправлять поле.

Follow-up

Что могут спросить дальше

Короткие ответы на уточнения про Infinity, NaN, -0 и безопасную обработку чисел во frontend-коде.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание