Proměnná const

AndreaAndrea

Jak název napovídá, proměnná const vychází ze slova constant. Pokud deklarujete proměnnou pomocí const, znamená to, že identifikátoru nelze znovu redeklarovat (přiřadit jinou hodnotu).

Dnes jsou ve všech moderních prohlížečích let a const plně podporovány a je tedy dobrou praktikou používat je kdykoliv je to možné, protože to pomáhá předcházet nechtěným změnám hodnot proměnných a dělá kód předvídatelnější. Zejména v kódu s velkým počtem identifikátorů a vysokou mírou opakování.

Declarace

Tato proměnná tedy musí být inicializována v době deklarace. Nemůžete tedy napsat const proVyvojare; bez počátečního přiřazení.

const PI = 3.14;
console.log(PI);  // vypíše 3.14
PI = 3.14159;  // chyba, nelze změnit hodnotu konstantní proměnné

Hodnota konstanty nemusí být při kompilaci známa, ale musíte jí přiřadit hodnotu přesně jednou.

Neměnitelnost není hloubková

Pokud const odkazuje na objekt, můžete stále měnit vlastnosti tohoto objektu. V případě pole můžeme přidávat do konstantního pole nové prvky.

Pokud chcete mít objektový typ zcela imutabilní použijte freeze na Object a jeho atributy:

const dog = Object.freeze({
  'num': 3
});
dog.num = 4; //throws error

Pokud použijete const s primitivní hodnotou jako je string, number, boolean pak její typ ani hodnoty nezměníte.

Mazání

Nemůžete změnit hodnotu nebo smazat konstantnní proměnnou

const a = 1;

a++;
//Uncaught TypeError: Assignment to constant variable.(…)

delete a;
//true

console.log(a);
//1

Rozsah platnosti (scope)

Pokud nevíte co je blokový rozsah pak si přečtěte tento článek. Proměnné deklarované pomocí const mají blokový rozsah, což znamená, že existují pouze v rámci bloku, ve kterém byly deklarovány.

Nemůžete získat const mimo scope:

if(!num){
  const num = 2;
}
console.log(num);
//Uncaught ReferenceError: num is not defined(…)

Také nemůžete získat hodnotu cost přes this, kvůli blokovému rozsahu:

const date = new Date();

console.log(this.date);
//undefined

V mnoha jazycích jsou konstanty užívany často v globálním scope a jsou používány pro uchování matematické nebo konfigurační hodnoty aplikace. Nicméně const je v tomto smyslu jiný, protože nelze použít globálně.

Descriptor vlastností

Jaký je popis (descriptor) této proměnné v interních strukturách JavaScriptu? Specifikace na úrovni ECMAScript specifikace nespecifikuje přesně jeho podobu. Chování const se řídí prostřednictvím scoping pravidel a pravidel pro proměnné v daném kontextu.

Hodnota const by mohla být nastavena na writeble false.