Funkcja isFinite
Funkcja isFinite służy do sprawdzania parametru
pod kątem tego, czy jest skończoną liczbą (tzn.
nie ciągiem znaków, tablicą itp. oraz nie plus
lub minus nieskończonością).
Jak działa ta funkcja: zwróci false,
jeśli liczba jest plus lub minus nieskończonością
(czyli Infinity)
lub nie jest liczbą (czyli NaN),
w pozostałych przypadkach zwróci true.
To znaczy, że ciągi znaków, tablice itp. zostaną przekształcone
w NaN i odpowiednio zwrócą false.
Istnieją jednak wyjątki: pusty ciąg znaków
'' zwraca true, ciąg znaków ze spacjami ' '
również zwraca true, null
zwraca true, dla wartości true i false
również zwracane jest true.
Dzieje się tak, ponieważ te wartości
są konwertowane na liczby, a nie na NaN.
Jeśli potrzebujesz naprawdę dokładnego sprawdzenia
czy coś jest liczbą, które nie uznaje za liczbę ciągu
ze spacjami, wartości logicznych i specjalnych
- użyj następującej funkcji isNumeric:
function isNumeric(num) {
return !isNaN(parseFloat(num)) && isFinite(num);
};
Przyjrzyjmy się, jak ona działa.
Funkcja isFinite konwertuje parametr
na liczbę i zwraca true, jeśli to nie Infinity,
-Infinity lub NaN.
Zatem prawa część odsianiie zdecydowanie
nie-liczby, ale pozostawi takie wartości
jak true, false, null, pusty ciąg '' i
ciąg ze spacjami, ponieważ są one poprawnie konwertowane
na liczby.
Aby odsiać te wartości, potrzebna jest funkcja
parseFloat,
która dla true, false, null, '', ' '
zwróci NaN. Tak działa funkcja parseFloat:
konwertuje parametr na ciąg znaków, czyli true,
false, null stają się 'true', 'false',
'null', a następnie odczytuje z niego liczbę,
przy czym pusty ciąg i ciąg ze spacjami
dają NaN. Następnie wynik parseFloat jest przetwarzany
przy pomocy !isNaN,
aby otrzymać true lub false zamiast NaN.
W rezultacie odsiewane jest wszystko oprócz ciągów-liczb
i zwykłych liczb.
Składnia
isFinite(wartość);
Przykład
Teraz isFinite wypisze true,
ponieważ parametr jest liczbą:
let num = 3;
console.log(isFinite(num));
Wynik wykonania kodu:
true
Przykład
Teraz isFinite wypisze false,
ponieważ parametr nie jest liczbą:
let num = 'abcde';
console.log(isFinite(num));
Wynik wykonania kodu:
false
Przykład
Teraz isFinite wypisze false,
ponieważ parametr jest nieskończonością:
let num = Infinity;
console.log(isFinite(num));
Wynik wykonania kodu:
false
Przykład
Teraz isFinite wypisze false,
ponieważ 1/0 - to w zasadzie Infinity
(nieskończoność):
let num = 1 / 0;
console.log(isFinite(num));
Wynik wykonania kodu:
false
Przykład
Teraz isFinite wypisze true,
ponieważ pusty ciąg znaków, niebędący liczbą,
- to wyjątek:
let num = '';
console.log(isFinite(num));
Wynik wykonania kodu:
true