Wątek przeniesiony 2022-12-22 17:37 z JavaScript przez Riddle.

Deklarowanie zmiennych z pojedynczym przypisaniem (const/let, val/var, final)

0

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?

49

Niemutowalność

5

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 
}
4

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.

6
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).

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1