Функция isFinite

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

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

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

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

javascriptfunction 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. В результате отсеивается все, кроме строк-чисел и обычных чисел.

Синтаксис

javascriptisFinite(значение);

Пример

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

javascriptlet num = 3;
console.log(isFinite(num));

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

javascripttrue

Пример

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

javascriptlet num = 'abcde';
console.log(isFinite(num));

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

javascriptfalse

Пример

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

javascriptlet num = Infinity;
console.log(isFinite(num));

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

javascriptfalse

Пример

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

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

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

javascriptfalse

Пример

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

javascriptlet num = '';
console.log(isFinite(num));

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

javascripttrue

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

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