Domů O mně Služby Portfolio Učím Blog Kontakt
← Zpět na učím

1.7 Number (čísla)

Výuka

Proč má JavaScript jen jeden číselný typ?

Mnoho programovacích jazyků rozlišuje mezi celými čísly (int) a desetinnými (float, double). JavaScript šel jinou cestou - má pouze jeden typ number pro všechna čísla.

Proč? JavaScript byl navržen jako jednoduchý skriptovací jazyk pro web. Zjednodušení na jeden typ znamenalo:

  • Méně rozhodování pro programátora
  • Žádné problémy s přetypováním mezi int/float
  • Jednodušší mentální model

Nevýhoda? Občasné problémy s přesností u desetinných čísel (viz tip níže).

Jak jsou čísla uložena?

JavaScript používá 64-bitovou reprezentaci podle standardu IEEE 754 (stejně jako většina jazyků pro double):

  • 52 bitů pro číslo samotné
  • 11 bitů pro exponent (velikost)
  • 1 bit pro znaménko (+/-)

To znamená:

  • Maximální bezpečné celé číslo: 9,007,199,254,740,991 (asi 9 kvadrilionů)
  • Desetinná čísla mohou mít nepřesnosti (0.1 + 0.2 ≠ 0.3)

Speciální hodnoty

JavaScript má tři speciální "čísla":

Hodnota Kdy vzniká Příklad
Infinity Dělení kladného nulou, příliš velké číslo 1 / 0, Math.pow(10, 1000)
-Infinity Dělení záporného nulou -1 / 0
NaN Neplatná matematická operace 0 / 0, Math.sqrt(-1)

Pozor: NaN znamená "Not a Number", ale typeof NaN === 'number'! A co je ještě divnější - NaN !== NaN.


JavaScript

// Celá čísla
const int1 = 42;
const int2 = -15;
const zero = 0;

// Desetinná čísla
const float1 = 3.14;
const float2 = -0.5;
const sci = 2.998e8;  // 299800000 (vědecká notace)

// Speciální hodnoty
const inf = Infinity;
const negInf = -Infinity;
const notNum = NaN;  // Not a Number

// Aritmetika
console.log(10 + 5);   // 15
console.log(10 - 5);   // 5
console.log(10 * 5);   // 50
console.log(10 / 5);   // 2
console.log(10 % 3);   // 1 (zbytek)
console.log(2 ** 3);   // 8 (mocnina)

// NaN vzniká při neplatných operacích
console.log(0 / 0);           // NaN
console.log(Math.sqrt(-1));   // NaN
console.log(parseInt('abc')); // NaN

// NaN není rovno samo sobě!
console.log(NaN === NaN);     // false
console.log(Number.isNaN(NaN)); // true ✅

// Převod na number
Number('123');     // 123
parseInt('123');   // 123
parseFloat('3.14'); // 3.14
+'123';            // 123 (unární +)

TypeScript

// Type annotation
const age: number = 25;
const pi: number = 3.14159;
const temp: number = -5.5;

// TS kontroluje typy
const count: number = 10;     // ✅ OK
// const count: number = '10'; // ❌ Error

// Funkce s number parametry
function add(a: number, b: number): number {
  return a + b;
}

console.log(add(5, 3));    // ✅ 8
// console.log(add('5', 3)); // ❌ Error

// Speciální hodnoty mají type number
const infinity: number = Infinity;
const nan: number = NaN;

// Literal types pro konkrétní čísla
type DiceRoll = 1 | 2 | 3 | 4 | 5 | 6;
const roll: DiceRoll = 4;  // ✅ OK
// const roll: DiceRoll = 7; // ❌ Error

Rozdíl JS vs TS

// JavaScript - žádná kontrola
let age = 25;
age = '25';  // ✅ OK (změna typu)

// TypeScript - typová kontrola
let age: number = 25;
// age = '25';  // ❌ Error: Type 'string' is not assignable

Tip

💡 Pozor na desetinná čísla:

console.log(0.1 + 0.2);  // 0.30000000000000004 (!)
console.log(0.1 + 0.2 === 0.3);  // false

// Řešení: zaokrouhlování
console.log((0.1 + 0.2).toFixed(2));  // "0.30"

💡 Bezpečné celé číslo:

Number.MAX_SAFE_INTEGER;  // 9007199254740991
Number.MIN_SAFE_INTEGER;  // -9007199254740991

// Pro větší čísla použij BigInt
const big = 9007199254740991n;  // BigInt

Kvíz

Které výroky jsou pravdivé?

- NaN === NaN vrátí false! NaN není rovno samo sobě (jediná hodnota v JS s touto vlastností)

- JavaScript má pouze jeden typ number pro všechna čísla (celá i desetinná)

- Infinity je platná number hodnota (typeof Infinity === 'number')

- Floating point aritmetika má omezenou přesnost (IEEE 754), proto 0.1 + 0.2 !== 0.3

🎯 Závěrečný projekt

Po dokončení všech 8 dílů vytvoříte jednoduchou Todо aplikaci v čistém JavaScriptu. Naučíte se, jak aplikovat vše, co jste se naučili, na reálný projekt.

Zobrazit podrobnosti projektu →

Připraveni začít?

Zaregistrujte se a získejte přístup ke všem dílům tohoto seriálu

Kontaktujte mě

Informace o seriálu

Obtížnost

Délka

Cca 480 minut

Počet videí

8 videí + projekty

Certifikát

Po dokončení obdržíte certifikát


Lekce v této sekci


Struktura lekcí (souborový strom)

06. Typescript specifika
  • v přípravě
08. Moduly tridy
  • v přípravě
09. React zaklady
  • v přípravě
10. React hooks
  • v přípravě
12. Nextjs server
  • v přípravě
13. Databaze auth
  • v přípravě
14. Nextjs pokrocile
  • v přípravě