TOC

This article has been localized into Czech by the community.

Datové typy:

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é.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!