> Как проверить, что первый аргумент является числом в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Газпромбанк
Стек: JavaScript
> Пример ответа
Короткий ответ
Проверить, что первый аргумент является числом в JavaScript, можно с помощью typeof arg === 'number' && !Number.isNaN(arg). Это исключает NaN, который typeof определяет как 'number'. Для более строгой проверки (целое число) используют Number.isInteger(arg). Если аргумент может быть объектом-обёрткой Number, добавляют arg instanceof Number.
Подробное объяснение
В JavaScript существует несколько способов проверки, является ли значение числом, каждый со своими нюансами:
typeof arg === 'number'- базовый способ, но возвращаетtrueдля NaN, что часто нежелательно.Number.isFinite(arg)- проверяет, что значение является числом и не равно Infinity, -Infinity или NaN.Number.isInteger(arg)- строгая проверка на целое число (не дробное и не NaN/Infinity).Object.prototype.toString.call(arg) === '[object Number]'- работает и для примитивов, и для объектов-обёрток.
Важно различать примитивный тип number и объект Number. При использовании new Number(5) typeof вернёт 'object', а arg instanceof Number - true. Для большинства практических задач достаточно проверки через typeof с отсеиванием NaN.
На практике
При разработке на фронтенде часто нужно проверять аргументы функций, значения из input-полей или данные из API. Для чисел с плавающей точкой используйте Number.isFinite(), для целых - Number.isInteger(). Если ожидается строка, которую нужно преобразовать, применяйте Number(value) или parseInt/parseFloat с последующей проверкой.
Для полиморфных функций, принимающих и примитивы, и объекты, используйте комбинацию typeof arg === 'number' || arg instanceof Number. В TypeScript эти проверки часто заменяются типами, но в чистом JS они необходимы для надёжности.
Пример кода
JAVASCRIPT// Базовая проверка с исключением NaNfunction isNumber(value) {return typeof value === 'number' && !Number.isNaN(value);}// Проверка на конечное число (не Infinity)function isFiniteNumber(value) {return Number.isFinite(value);}// Проверка на целое числоfunction isInteger(value) {return Number.isInteger(value);}// Универсальная проверка (примитив или объект Number)function isNumberOrWrapper(value) {return (typeof value === 'number' && !Number.isNaN(value))|| value instanceof Number;}// Примеры использованияconsole.log(isNumber(42)); // trueconsole.log(isNumber(NaN)); // falseconsole.log(isNumber('42')); // falseconsole.log(isNumber(new Number(5))); // false (объект)console.log(isNumberOrWrapper(new Number(5))); // true
Как отвечать на собеседовании
Начните с простого решения через typeof, затем уточните про NaN. Покажите понимание различий между Number.isNaN() и глобальной isNaN(). Упомяните edge cases: Infinity, объекты-обёртки, BigInt. Если спросят про производительность, отметьте, что typeof - самый быстрый способ. Для senior-позиции важно продемонстрировать знание контекста: когда какая проверка уместна, и как избегать ложных срабатываний.
Что проверяет интервьюер
- Понимание системы типов JavaScript и разницы между примитивами и объектами.
- Знание особенностей NaN и способов его обнаружения.
- Умение выбирать подходящую проверку под конкретную задачу.
- Осведомлённость о потенциальных подводных камнях (например,
typeof null === 'object'). - Способность объяснить trade-off между строгостью проверки и производительностью.
Типичные ошибки
- Использование
isNaN(value)без понимания, что она приводит аргумент к числу (например,isNaN('строка')вернётtrue). - Проверка только через
typeof value === 'number'без учёта NaN. - Путаница между
Number.isNaN()и глобальнойisNaN(). - Игнорирование случая с объектом
new Number(). - Использование
value == nullдля проверки на число (это проверяет только на null/undefined).
> Похожие задачи по frontend
Как отменить или обработать промис в JavaScript
Как выполняется цикл с условием сравнения строки и числа в JavaScript?
Как создать массив с числами от 1 до 50 и вывести их в JavaScript?
Для чего нужен тип Symbol в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью