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 →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
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
Struktura lekcí (souborový strom)
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
- 03.01 Deklarace funkce
- 03.02 Function Expression
- 03.03 Arrow Functions
- 03.04 Parametry a argumenty
- 03.05 Return hodnoty
- 03.06 Výchozí parametry
- 03.07 Rest parametry
- 03.08 Co je Scope
- 03.09 Lexikální Scope
- 03.10 Řetězec Scope
- 03.11 Globální Scope
- 03.12 Životní Cyklus Proměnných
- 03.13 Omezení Scope
- 03.14 Použití Closures
- 03.15 Callback funkce
- 03.16 Higher-order Functions
- 03.17 IIFE
- 03.18 Void funkce
- 03.19 Rekurze
- v přípravě
- v přípravě
- v přípravě
- v přípravě
- 01 — Co je Next.js
- 02 — Vytvoření projektu
- 03 — Struktura projektu (app/)
- 04 — Page komponenty (page.js / page.tsx)
- 05 — Layout komponenty (layout.js / layout.tsx)
- 06 — File-based routing
- 07 — Dynamické routy ([id]/page.js)
- 08 — Link komponenta (navigace)
- 09 — Image komponenta (next/image)
- 10 — Metadata (title, description, Open Graph)
- 11 — Loading UI (loading.js / loading.tsx)
- 12 — Error handling (error.js / error.tsx)
- 13 — Not Found (not-found.js / not-found.tsx)
- v přípravě
- v přípravě
- v přípravě