This article has been localized into Czech by the community.
Hodnota Null a nedefinovaná (undefined)
Null je běžný koncept v programování, který se nachází v mnoha programovacích jazycích. Často se stylizuje jako NULL nebo null, a v některých programovacích jazycích změnili název na "nil" nebo "none", ale znamená to totéž: Nic. Koncept null se také nazývá nulový ukazatel nebo nulová reference, protože v podstatě ukazuje na něco, co (zatím) nemá hodnotu.
null
V JavaScriptu je null také považován za primitivní typ - můžete proměnné přiřadit hodnotu null a můžete proměnnou porovnat s hodnotou null, abyste zjistili, zda lze tuto proměnnou považovat za null nebo ne. Například, pokud deklarujete proměnnou, které plánujete později přiřadit hodnotu, můžete ji inicializovat hodnotou null:
let v = null;
Pokud zkontrolujete hodnotu této proměnné, uvidíte, že je rovna null:
let v = null;
alert(v == null);
Pokud však deklarujete proměnnou bez přiřazení jakékoli hodnoty, ve skutečnosti je také rovna null:
let v;
alert(v == null);
To dává smysl, protože jak jsme již diskutovali, null může být považováno za něco, co ukazuje na nic. Ale znamená to, že tyto dva způsoby vedou k úplně identické proměnné?
undefined
V JavaScriptu proměnná deklarovaná bez počáteční hodnoty není stejná jako proměnná deklarovaná s hodnotou null. V mnoha programovacích jazycích by mezi nimi nebyl žádný rozdíl, a pokud použijete běžné srovnání (jako jsme to udělali ve výše uvedených příkladech), nezdá se, že by zde nějaký rozdíl byl, ale je.
Důvodem je, že v JavaScriptu máme koncept "undefined", který vyjadřuje přesně to, co název naznačuje: Něco, co ještě nebylo definováno. Rozlišení mezi null a undefined může být pro nováčky dost obtížné pochopit, ale někdy je to obtížné k pochopení i pro pokročilé, kteří již ovládají jiný programovací jazyk, kde existuje pouze jeden typ "null".
Ale nejprve mi dovolte dokázat, že v JavaScriptu null a undefined nejsou stejné. Pro to budeme muset použít operátor přísné rovnosti (===), protože běžný operátor rovnosti (==) rozdíl nerozezná. Zde je příklad:
let v1 = null;
let v2;
alert("v1 equality: " + (v1 == null)); // true
alert("v2 equality: " + (v2 == null)); // true
alert("v1 strict equality: " + (v1 === null)); // true
alert("v2 strict equality: " + (v2 === null)); // false
Jak vidíte, jakmile přepnu na operátor přísné rovnosti, v2 se nerovná null, ale použitím běžného operátoru rovnosti je považováno za stejné jako null. A ve většině situací opravdu nebudete potřebovat rozlišovat mezi těmito dvěma hodnotami.
Ale když to budete potřebovat, můžete porovnávat s globální vlastností undefined, která obsahuje primitivní hodnotu undefined. Když to uděláme, uvidíme něco, co věci může ještě více zamotat: Proměnná inicializovaná s hodnotou null může být stále považována za "nedefinovanou" (undefined), když použijeme běžný, ne přísný operátor rovnosti:
let v1 = null;
let v2;
alert("v1 equality: " + (v1 == undefined)); // true
alert("v2 equality: " + (v2 == undefined)); // true
alert("v1 strict equality: " + (v1 === undefined)); // false
alert("v2 strict equality: " + (v2 === undefined)); // true
Pokud jste v tomto okamžiku trochu zmateni, úplně to chápu. Má to hodně společného s dynamickým systémem typů JavaScriptu a tím, jak často za vás provádí konverzi typů a snaží se vám pomoci. V tomto případě to ale přidává docela dost zmatečnosti, ale naštěstí se s tím nebudeme muset moc zabývat - většinou stačí vědět, jestli něco může být považováno za null, i když je to ve skutečnosti undefined.
Shrnutí
V programování obecně, a v JavaScriptu také, je null totéž co "nic", a může být přiřazeno k proměnným a kontrolováno. JavaScript přidává další koncept nazvaný undefined, a v tomto článku jsme zdůraznili rozdíly, i když nejsou vždy důležité.