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.