Naučte se

Primitivní datové typy

Javascript je dynamický typovaný jazyk. Při deklaraci proměnné tedy nemusíme uvádět její datový typ. Na rozdíl od staticky typovaných jazyků neurčuje proměnná typ, ale hodnota proměnné je určitého typu.

V Javascriptu, tak jako v jiných jazycích, najdeme sadu primitivních datových typů, zbytek jsou referenční hodnoty jako jsou objekty. Existuje 7 primitivních datových typů, kterými jsou string, number, bigint, boolean a dva typy pro prázdné hodnoty undefined a null. Nový standard ECMA 6 přinesl nový primitivní typ symbol.

Operátor typeof

V Javascriptu je zabudovaný velice užitečný operátor typeof . Pomocí něj, můžeme zjistit jaký datový typ má daná hodnota či proměnná. Dalo by se předpokládat, že typeof bude vracet jeden ze sedmi primitivních typů a typ Object. Operátor však vrací různých 9 hodnot. Vypišme si je všechny:

typeof "proVyvojare"; // string

typeof 1; // number

typeof 42n; // bigint

typeof true; // boolean

typeof Symbol(); // symbol

typeof {}; // object

var x;
typeof x; // undefined

typeof null; // object (starý js bug)

typeof function () {};  // function

typeof [];  // object

Možná jste si všimli, že v seznamu typů přebývá function. Funkce není primitivním datovým typem, ale jde ve skutečnosti o objekt.

ECMAScript 5 byla zavedena metoda Array.isArray() pro kontrolu pole, protože typeof nedokáže rozlišit pole od objektů.

Kromě null a undefined mají všechny primitivní hodnoty objektové ekvivalenty (String, Number, BigInt, Boolean, Symbol) které pracují s primitivnímy typy.

Typ number

JavaScript nerozlišuje mezi celými a desetinnými čísly, všechny čísla ukládá jako desetinná čísla s plovoucí desetinnou čárkou s dvojitou přesností podle mezinárodního standardu IEEE 754.

Neplatné číslo

Součást čísel je i hodnota NaN, která je určená pro neplanou hodnotu čísla.

Kladné a záporné

Javascript má také záporné a kladné nekonečno.

Number.NEGATIVE_INFINITY //-Infinity
Number.POSITIVE_INFINITY //Infinity

A také narazíte na záporné a kladné nulové hodnoty.

Zaokrouhlovací chyba

V JavaScriptu můžena narazit na situaci, kdy součet 0.1 + 0.2 === 0.3 vrátí hodnotu false. Sčítání se ve skutečnosti rovná 0,30000000000000004. Této situaci se říká efekt zaokrouhlovací chyby a dochází k ní u binárních čísel s plovoucí desetinnou čárkou, kterým někdy chybí přesnost.

ES6 zavádí konstantu Number.EPSILON, která se používá pro kontrolu, zda rozdíl mezi skutečným a očekávaným výsledkem spadá do tolerance zaokrouhlovací chyby 2,220446049250313e-16.

Typ string

Řetězce v javascriptu jsou charateristické tím, že jsou neměnné, tzv. imutabilní.

a = "hello";
a[2] = "Z";
a //"hello"
a.toUpperCase(); //"HELLO"
a //"hello"

Typ boolean

Kontrola logických hodnot je snadná - jsou buď true, nebo false a operátor typeof vrátí hodnotu "boolean":

Prázdné hodnoty

Při práci s datovými typy si musíme dát pozor také na prázdné stavy undefined (nedefinováno), null a undeclared (nedeklarováno).

Nedeklarováný

Stav nedeklarováno (undeclared) znamená, že se pokoušíme přistupovat k proměnné, která dosud nebyla deklarována pomocí klíčového slova var, let nebo const. Nedeklarováno tedy znamená, že proměná nebyla nikdy vytvořena. Javascript v tomto případě skončí s vyhozenou chybovou vyjímkou.

// ReferenceError: vyvojar is not defined
console.log(vyvojar) 

Null

Hodnota null reprezentuje prázdný objekt. Vyskytuje se na místech, kde očekáváme objekt nebo funkci.

Nedefinovano

Stav undefined1 je poměrně běžný a vyjadřuje, že v paměti existuje požadovaná proměnná, ale v tuto chvíli nemá žádnou hodnotu.

var vyvojar;
console.log(vyvojar) // undefined

Null vs nedefinováno

Operátor dvojitého rovná se == nerozlišuje mezi null a undefined. Pokud z nějakého důvodu chcete ve svém kódu tyto dva typy rozlišovat, používejte striktní porovnání ===.

null == undefined // true
null === undefined // false

Související