Функция isFinite - проверка числа на JavaScript
Функция 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