Функция 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