Załóżmy, że mam taką funkcję:
function markFieldAsValid(fieldId) {
let field = document.getElementById(fieldId);
field.setAttribute("class", "FormValid");
// do other things with field
}
Co mi da użycie const
zamiast let
?
Wątek przeniesiony 2022-12-22 17:37 z JavaScript przez Riddle.
Załóżmy, że mam taką funkcję:
function markFieldAsValid(fieldId) {
let field = document.getElementById(fieldId);
field.setAttribute("class", "FormValid");
// do other things with field
}
Co mi da użycie const
zamiast let
?
Niemutowalność
Tylko tyle, że jeśli przez pomyłkę zmienisz wartość field
to język powie "hola hola".
Drugim aspektem jest wyrażanie intencji. Jak czytam kod, i widzę gdzieś let
albo var
to myślę: "oho, ktoś chce mutować zmienną, np w while
". Jak widzę const
albo val
to wiem że raz przydzielona wartość już się nie zmieni.
Mało kto również wie że np w JavaScript w pętli też może być const
, np:
for (const value in array) {
value = 2; // błąd, nadpisanie
}
Dobrą praktyką w programowaniu jest używanie tylko tego co potrzebujesz. let
daje więcej możliwości niż const
więc jeśli możesz użyć const
to twój kod jest czytelniejszy i trudniej wprowadzić przypadkowy błąd.
ledi12 napisał(a):
Niemutowalność
const
nie ma wpływu na niemutowalność wartości w JS.
Niemutowalne wartości (prymitywy: https://developer.mozilla.org/en-US/docs/Glossary/Primitive ) pozostają niemutowalne, a wszelakie obiekty, tablice itp. pozostają mutowalne.
To, co zapewnia const
, to że nie możesz przypisać od nowa zmiennej:
const foo = {a: 123};
foo.a = 456; // OK
foo = {a: 456}; // błąd: TypeError: Assignment to constant variable.
czyli to, co można nazwać tu stałym/niemutowalnym, to najwyżej binding/referencja (zmienna foo
cały czas ma wskazywać na ten sam obiekt lub wartość), ale const
nie ma wpływu na mutowalność wewnętrzną (czyli jeśli obiekt się zmieni w środku, to spoko, ma prawo się zmienić, byleby był to ten sam obiekt).
ledi12 napisał(a):
Niemutowalność
Nie do końca, bo po pierwsze możesz osiągnąć niemutowalność bez const
/val
(np wystawiając tylko gettery z klasy, i nie wystawiając setterów), a po drugie nawet jak użyjesz const
to nadal możesz mutować obiekty i tablice.
Więc const
nie jest warunkiem koniecznym żeby mieć niemutowalność, i nie jest warunkiem wystarczającym żeby mieć niemutowalność.
const
i val
to po prostu jednoczesną deklaracja zmiennej, która raz zdefiniowana nie może się zmienić.