Funkce isFinite
Funkce isFinite slouží ke kontrole parametru
zda je konečným číslem (tj.
ne řetězcem, polem atd. a ne plus
nebo minus nekonečnem).
Jak tato funkce funguje: vrátí false,
pokud je číslo plus nebo minus nekonečno
(tj. Infinity)
nebo není číslem (tj. NaN),
v ostatních případech vrátí true.
To znamená, že řetězce, pole atd. budou převedeny
na NaN a podle toho vrátí false.
Existují však výjimky: prázdný řetězec
'' vrací true, řetězec s mezerami ' '
také vrací true, null
vrací true, pro hodnoty true a false
se také vrací true.
To se děje proto, že tyto hodnoty
jsou převedeny na čísla, a ne na NaN.
Pokud potřebujete skutečně přesnou kontrolu
čísla, která nepovažuje za číslo řetězec
s mezerami, logické a speciální hodnoty
- použijte následující funkci isNumeric:
function isNumeric(num) {
return !isNaN(parseFloat(num)) && isFinite(num);
};
Pojďme se podívat, jak funguje.
Funkce isFinite převede parametr
na číslo a vrátí true, pokud to není Infinity,
-Infinity nebo NaN.
Takže pravá část odmítne zjevně
nečísla, ale ponechá hodnoty
jako true, false, null, prázdný řetězec '' a
řetězec s mezerami, protože se správně převádějí
na čísla.
K odmítnutí těchto hodnot je potřeba funkce
parseFloat,
která pro true, false, null, '', ' '
vrátí NaN. Takto je funkce parseFloat navržena:
převede parametr na řetězec, tj. true,
false, null se stanou 'true', 'false',
'null', a poté z něj přečte číslo,
přičemž prázdný řetězec a řetězec s mezerami
dávají NaN. Poté je výsledek parseFloat zpracován
pomocí !isNaN,
čímž získáme true nebo false místo NaN.
Výsledkem je, že jsou odmítnuty všechny hodnoty kromě číselných řetězců
a běžných čísel.
Syntaxe
isFinite(hodnota);
Příklad
Nyní isFinite vypíše true,
protože parametr je číslo:
let num = 3;
console.log(isFinite(num));
Výsledek provedení kódu:
true
Příklad
Nyní isFinite vypíše false,
protože parametr není číslo:
let num = 'abcde';
console.log(isFinite(num));
Výsledek provedení kódu:
false
Příklad
Nyní isFinite vypíše false,
protože parametr je nekonečno:
let num = Infinity;
console.log(isFinite(num));
Výsledek provedení kódu:
false
Příklad
Nyní isFinite vypíše false,
protože 1/0 je v podstatě Infinity
(nekonečno):
let num = 1 / 0;
console.log(isFinite(num));
Výsledek provedení kódu:
false
Příklad
Nyní isFinite vypíše true,
protože prázdný řetězec, který není číslem,
je výjimka:
let num = '';
console.log(isFinite(num));
Výsledek provedení kódu:
true