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 undefined
1 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