# Функция isFinite

Функция `isFinite` для проверки параметра на то, что он является конечным числом (то есть не строкой, массивом и т.п. и не плюс или минус бесконечностью).

Как работает эта функция: она вернет `false`, если число является плюс или минус бесконечностью (то есть `Infinity`) или не числом (то есть `NaN`), в остальных случаях вернет `true`. То есть строки, массивы и т.п. будут преобразованы в `NaN` и соответственно вернут `false`.

Однако есть исключения: пустая строка `''` возвращает true, строка с пробелами `' '` также возвращает true, `null` возвращает true, для значений `true` и `false` также возвращается `true`.

Это происходит потому, что эти значения преобразуются в числа, а не в `NaN`. Если вам нужна действительно точная проверка на число, которая не считает числом строку из пробелов, логические и специальные значения - используйте следующую функцию `isNumeric`:

`function isNumeric(num) { return !isNaN(parseFloat(num)) && isFinite(num); };`

Давайте разберемся, как она работает. Функция `isFinite` преобразует параметр к числу и возвращает `true`, если это не `Infinity`, `-Infinity` или `NaN`. Таким образом, правая часть отсеет заведомо нечисла, но оставит такие значения как `true`, `false`, `null`, пустую строку `''` и строку с пробелами, т.к. они корректно преобразуются в числа.

Чтобы отсеять эти значения, нужна функция `parseFloat`, которая для `true`, `false`, `null`, `''`, `' '` вернет `NaN`. Так устроена функция `parseFloat`: она преобразует параметр к строке, т.е. `true`, `false`, `null` становятся `'true'`, `'false'`, `'null'`, а затем считывает из нее число, при этом пустая строка и строка с пробелами дают `NaN`. Затем результат `parseFloat` обрабатывается с помощью !isNaN, чтобы получить `true` или `false` вместо `NaN`. В результате отсеивается все, кроме строк-чисел и обычных чисел.

## Синтаксис

`isFinite(значение);`

## Пример

Сейчас `isFinite` выведет `true`, так как параметр является числом:

`let num = 3; console.log(isFinite(num));`

Результат выполнения кода:

`true`

## Пример

Сейчас `isFinite` выведет `false`, так как параметр не является числом:

`let num = 'abcde'; console.log(isFinite(num));`

Результат выполнения кода:

`false`

## Пример

Сейчас `isFinite` выведет `false`, так как параметр является бесконечностью:

`let num = Infinity; console.log(isFinite(num));`

Результат выполнения кода:

`false`

## Пример

Сейчас `isFinite` выведет `false`, так как `1/0` - это по сути `Infinity` (бесконечность):

`let num = 1 / 0; console.log(isFinite(num));`

Результат выполнения кода:

`false`

## Пример

Сейчас `isFinite` выведет `true`, так как пустая строка, не являющаяся числом, - это исключение:

`let num = ''; console.log(isFinite(num));`

Результат выполнения кода:

`true`

## Смотрите также

- функцию `isNaN`,
  которая осуществляет проверку на `NaN`
- оператор `typeof`,
  который определяет тип данных

← →
↑
en ru