Интервью-вопрос
Что будет, если 1 разделить на 0
В JavaScript 1 / 0 вернет Infinity. Важно не только назвать результат, но и объяснить, почему это опасно для UI, расчетов и данных, которые уходят наружу.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
Короткий ответ: в JavaScript 1 / 0 возвращает Infinity. Это значение типа number. Код после такого выражения продолжит выполняться.
При этом математически деление на ноль не становится корректным. JavaScript просто следует правилам чисел с плавающей точкой. Для ненулевого числа деление на ноль дает бесконечность с нужным знаком.
На интервью важно не остановиться на слове Infinity. Добавьте соседние случаи: -1 / 0 даст -Infinity, а 0 / 0 даст NaN.
Что сказать на интервью
Удобная формулировка:
В JavaScript 1 / 0 вернет Infinity, потому что Number работает по правилам IEEE 754. Ошибки не будет. Но это не значит, что результат валиден для приложения. Если значение может попасть в интерфейс, аналитику или запрос, я проверю знаменатель и итог через Number.isFinite.
Такой ответ звучит сильнее, чем просто "будет Infinity". Он показывает, что вы знаете поведение языка и понимаете практический риск.
Какие результаты нужно различать
Что может попасть во frontend-код
Infinity или -InfinityНе показывайте это как нормальный результат. Проверьте знак и замените значение на понятное состояние, если расчет невозможен.
NaNЭто неопределенный результат. Проверяйте Number.isNaN или Number.isFinite. Иначе NaN может испортить следующие вычисления.
Большое числоФормально это не деление на ноль. Но для UI такой результат тоже может быть опасным. Нужны ограничения, округление или валидация.
nullInfinity, -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, не доверяйте ему вслепую. Проверьте тип и конечность числа перед использованием.
Как выбрать безопасное действие
Как отвечать и что делать в коде
Скажите: в JavaScript 1 / 0 даст Infinity, но математически деление на ноль не определено.Проверяйте Number.isFinite и показывайте понятное состояние вместо Infinity или NaN.Нормализуйте результат явно, потому что JSON.stringify превратит Infinity и NaN в null.Валидируйте входные данные до вычисления. Отдельно обработайте ноль, -0, null и пустую строку.Проверка denominator === 0 полезна, но не всегда достаточна. Во frontend часто есть строки из инпутов, пустые значения, null, undefined и уже готовые результаты от API.
Поэтому надежный подход такой: валидируйте входные данные, выполните расчет, затем проверьте итог. Для результата лучше подходит Number.isFinite, потому что он отсекает и Infinity, и -Infinity, и NaN.
Почему это важно именно во frontend
Во frontend некорректное число часто не падает сразу. Оно портит пользовательский сценарий. Например, Infinity может попасть в подпись графика, ширину прогресс-бара, сортировку таблицы, цену за единицу или событие аналитики.
Еще один риск связан с отправкой данных. Если объект содержит Infinity или NaN, при JSON.stringify эти значения внутри объекта и массива станут null. Backend может принять запрос, но смысл поля будет потерян.
Поэтому на интервью полезно связать ответ с реальной практикой. Вы знаете, что JS не упадет, поэтому сами проверяете границы и не пропускаете невалидные числовые значения дальше.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Путать Infinity и NaN
1 / 0даетInfinity, а0 / 0даетNaN. Если назвать оба случаяNaN, ответ будет звучать неточно. Лучше сразу разделить эти результаты и объяснить, где каждый появляется. - 2
Думать, что программа упадет
В JavaScript обычное деление на ноль не выбрасывает исключение. Код продолжит выполняться. В этом и есть риск: некорректное значение может попасть в UI, график, сортировку или запрос. Безопаснее явно валидировать знаменатель и проверять итог черезNumber.isFinite. - 3
Показывать Infinity пользователю
Для пользователяInfinityпочти всегда выглядит как баг. В процентах, цене за единицу или скорости загрузки это не полезный результат. Лучше показать текст вроде "недостаточно данных" или запретить расчет, пока знаменатель равен нулю. - 4
Проверять только denominator === 0
Такая проверка не ловитNaN,Infinity, строковые значения и ошибки парсинга. Если данные приходят из формы или API, сначала приведите их к числам. Потом проверьтеNumber.isFiniteдля входных данных и результата. - 5
Забывать про JSON.stringify
Если отправить объект сInfinityилиNaNчерез JSON, значение станетnull. Это тихая ошибка. Backend может принять данные, но смысл расчета потеряется. Лучше заменить результат на явный статус или не отправлять поле.
Follow-up
Что могут спросить дальше
Короткие ответы на уточнения про Infinity, NaN, -0 и безопасную обработку чисел во frontend-коде.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Чем не устраивает текущее место работы 😎
Отвечайте честно, но без жалоб и обвинений. На странице разбираем, как объяснить причины смены работы через рост, задачи, продукт и ожидания от новой роли.
Что использовал на своем проекте 😎
В ответе важно назвать не весь стек подряд, а связать технологии с задачами, вашей ролью и результатом. Разбираем, как говорить о проектном опыте честно и без лишнего перечисления инструментов.