Nekonečno v JavaScriptu

SnoopySnoopy

Některé programovací jazyky, včetně Javascriptu podporují nekonečno. V JavaScriptu máme build-in číselnou hodnotu pro kladné nekonečno (Infinity) a také záporné nekonečno (-Infinity).

Další způsob, jak můžeme přistoupit k nekonečnu, je prostřednictvím třídy Number, jak ukazuje následující kód:

Number.POSITIVE_INFINITY); // Infinity
Math.min(); // Infinity

Number.NEGATIVE_INFINITY; // -Infinity
Math.max(); // -Infinity

Použití nekonečna v jazyce může být v některých případech užitečné, například když potřebujeme přiřadit hodnotu, která je větší nebo menší než jiná hodnota v daném kontextu. Jako je hledání minima

const findMinimum = (numbers) => {
	let min = Infinity;
	for (const n of numbers) {
		if (n < min) min = n;
	}
	return min;
}

Také se hodí když potřebujeme testovat podmínky, které zahrnují hodnoty, které mohou být nekonečné sekce (Operace s nekonečnem).

Ověřování nekonečna

K ověření, zda je hodnota nekonečná slouží funkce isFinite(). Tato funkce vrací false, pokud je argument není rovnu Infinity nebo není číselný.

if (!isFinite(x)) {
  console.log("Hodnota je nekonečno");
}

Operace s nekonečnem

Nekonečno je v Javascriptu používané v matematickém smyslu a k reprezentaci matematických výsledků, které vedou k nekonečnu jako jsou asymptoty, nebo výsledek po dělení čísla nulou.

console.log(46 / 0); // Infinity

To může být příjemnější než, když v některých technologích, obvykle dostanete chybovou zprávu oznamující „Nelze dělit nulou“.

Násobení nulou

Pokud násobíme jakékoliv nekonečno nulou, výsledkem bude neplatné číslo (NaN). Například

Infinity * 0 = NaN

Násobení a exponenciální funkce

Pokud náš číselný výsledek překročit rozsah datového typu number, stává se nekonečným.

isFinite(1.7976931348623157e+308) // true
isFinite(1e309) // false

Co může být poněkud zvláštní je, když počítáme exponenciální funkce s velkými exponenty.

Math.exp(1000) === Infinity // true

Logaritmus nuly

Pokud počítáme logaritmus z nuly, výsledkem bude záporné nekonečno. Například

Math.log(0) = -Infinity

Buďte opatrní když konvertujete nekonečno do JSON

Pokud při práci s daty děláte konverze do JSONu např. používáte JSON.stringify() k převodu objektu na řetězec JSON, měli byste vědět, jak se zachází s hodnotami Infinity. Nekonečno je sice platná matematická hodnota, ale nemusí být podporováno všemi nástroji a knihovnami pro práci s JSON.

Všimněte si následujícího příkladu:

let myJSON = {
  value1: 6,
  value2: 1.7976931348623157e+309
  value3: Infinity,
  value4: -Infinity,
};

console.log(JSON.stringify(myJSON, null, 2));

dostaneme

"{
  'value1': 6,
  'value2': null
  'value3': null,
  'value4': null,
}"

Všimněte si, že původní data v objektu před zřetězením obsahují tři různé nekonečné hodnoty. Nicméně následně, jsou však tyto hodnoty převedeny na hodnotu null. To by se také stalo, pokud by jedna z hodnot byla původně NaN.