isFinite() проверяет, превращается ли значение в конечное число.
Это глобальная функция JavaScript. Она сначала приводит значение к числу, а потом проверяет, не равно ли оно NaN, Infinity или -Infinity.
Синтаксис
isFinite(value)
value - значение, которое нужно проверить.
Что делает isFinite()
Функция пытается получить из значения число и потом отвечает: это конечное число или нет.
console.log(isFinite(123)); // true
console.log(isFinite("123")); // true
console.log(isFinite(Infinity)); // false
console.log(isFinite(NaN)); // false
Из-за автоматического приведения типов isFinite() работает мягче, чем Number.isFinite().
Что возвращает isFinite()
isFinite() всегда возвращает булево значение:
true, если после приведения получилось конечное числоfalse, если получилосьNaN,Infinityили-Infinity
console.log(isFinite(10)); // true
console.log(isFinite("10")); // true
console.log(isFinite(-Infinity)); // false
Неявное приведение типов
Это главный нюанс функции.
isFinite() не проверяет значение “как есть”, а сначала пытается превратить его в число.
console.log(isFinite("123")); // true
console.log(isFinite(null)); // true
console.log(isFinite(true)); // true
Почему так:
"123"превращается в123nullпревращается в0trueпревращается в1
Поэтому результат может выглядеть неожиданно, если ждать строгой проверки.
isFinite() и Number.isFinite()
Это самая важная пара для сравнения.
console.log(isFinite("123")); // true
console.log(Number.isFinite("123")); // false
isFinite()сначала приводит значение к числуNumber.isFinite()ничего не приводит и проверяет только готовое число
Ещё пример:
console.log(isFinite(null)); // true
console.log(Number.isFinite(null)); // false
Если нужна строгая и предсказуемая проверка, чаще лучше Number.isFinite().
isFinite() и Number()
По сути, isFinite() ведёт себя так, как будто внутри сначала вызывается Number().
console.log(Number("123")); // 123
console.log(isFinite("123")); // true
А здесь результат уже другой:
console.log(Number("hello")); // NaN
console.log(isFinite("hello")); // false
Неожиданные примеры
Вот случаи, которые чаще всего сбивают с толку:
console.log(isFinite("")); // true
console.log(isFinite(" ")); // true
console.log(isFinite(null)); // true
console.log(isFinite([])); // true
console.log(isFinite([123])); // true
console.log(isFinite([1, 2])); // false
console.log(isFinite({})); // false
Все эти результаты связаны именно с автоматическим приведением типов.
Infinity и NaN
Если после приведения получается NaN, Infinity или -Infinity, функция вернёт false.
console.log(isFinite(NaN)); // false
console.log(isFinite(Infinity)); // false
console.log(isFinite(-Infinity)); // false
Это и есть основная задача isFinite().
Когда это полезно
isFinite() удобно использовать, когда:
- нужно быстро понять, можно ли получить из значения обычное число
- не страшно неявное приведение типов
- вы осознанно проверяете результат преобразования
Пример:
if (!isFinite(userInput)) {
console.log("Введите корректное число");
}
Для грубой проверки ввода такой вариант иногда подходит.
Когда лучше Number.isFinite()
Если вам нужна строгая проверка уже готового числа, обычно лучше:
const value = Number(userInput);
if (!Number.isFinite(value)) {
console.log("Введите корректное число");
}
Так код получается понятнее и предсказуемее.
Частые ошибки
Думать, что isFinite() проверяет только числа
console.log(isFinite("10")); // true
Но строка "10" сама по себе не число. Просто она успешно приводится к числу.
Удивляться результату для null, пустой строки и true
console.log(isFinite(null)); // true
console.log(isFinite("")); // true
console.log(isFinite(true)); // true
Это нормальное поведение для глобальной isFinite(), потому что здесь работает приведение типов.
Использовать isFinite() там, где нужна строгая проверка
console.log(isFinite("123")); // true
console.log(Number.isFinite("123")); // false
Если важно проверить именно число, а не “что-то, что можно привести к числу”, чаще лучше Number.isFinite().
Быстрая памятка
isFinite()- это глобальная функция- она сначала приводит значение к числу
- возвращает
true, если результатом стало конечное число - строки,
null,trueи некоторые массивы могут датьtrue - для строгой проверки обычно удобнее
Number.isFinite()
Коротко
isFinite() - это проверка не только для чисел, а для значений, которые можно превратить в конечное число. Главное, что стоит запомнить: из-за автоматического приведения типов в современном коде её обычно используют осторожно, а для точной проверки предпочитают Number.isFinite().