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