Kódím.cz
3

Práce se stavovými hodnotami

Půjdeme víc do hloubky ohledně reprezentace stavu v komponentách pomocí různých typů hodnot

V této lekci se vydáme hlouběji do tajů JavaScriptových proměnných a hodnot. Přestože takový výklad může vypadat jako začátečnické téma, brzy zjistíme, že situace je zapeklitější než by se na první pohled zdálo.

Motivace

Vytvořme nejdříve několik nevinně vypadajících proměnných:

const age1 = 25;
const age2 = 25;

const name1 = 'petr';
const name2 = 'petr';

const workout1 = [5, 3, 7];
const workout2 = [5, 3, 7];

Zdá se, že proměnné po dvojících obsahují tytéž hodonty. Pojďme to otestovat v konzoli.

> age1 === age2
true
> name1 === name2
true
> workout1 === workout2
???

Výsledek posledního porovnávání schválně vynecháváme abyste si příkaz sami vyzkoušeli. Výsledek vás nejspíše překvapeni.

Aby zmatení nebylo málo, provedeme ještě následující experiment:

> const x = [1, 2, 3]
> const y = x;
> x.push(4)
> x === y
???

V prvním případě jsme jako porovnání dvou zdánlivě stejných hodnot obdrželi false. V druhém případě jsme naoopak při porovnání dvou očekávaně odlišných hodnot obdrželi true. Zkusme ještě něco naprosto přímočarého:

> 'petr' === 'petr'
true
> [1, 2, 3] === [1, 2, 3]
false

Ne, ještě JavaScript navždy nezavrhujte, není rozbitý. Ve skutečnosti na podobnou situaci narazíte ve většině programovacích jazyků. Logiku a smysl v tom všem objevíme, když porozumíme pojmům jako reference a imutabilita.