Na pewno dobrze pamiętasz, że dzięki słowu kluczowemu const, który został wprowadzony w ES6 możesz deklarować stałe. Dla przypomnienia krótki przykład:
let myLetNumber = 23;
myLetNumber = 25
const myConstNumber = 12;
myConstNumber = 14; //TypeError: invalid assignment to const 'myConstNumber'
To co się tutaj stało nie powinno być dla Ciebie żadną nowością :) Gdy zadeklarujesz zmienna za pomocą słowa let, możesz spokojnie wartość tej zmiennej zastąpić inną. W przypadku gdy zadeklarujesz stałą za pomocą słowa const, wartości tej już nie możesz zmienić. Otrzymasz wtedy błąd. Ok to wszystko jest pewnie dla Ciebie jasne, a teraz zobacz jak wygląda to na obiektach.class Car {
constructor(name, price) {
this.name = name;
this.price = price;
}
}
const car = new Car('Audi', 20000);
car = new Car('Seat', 15000); //TypeError: invalid assignment to const 'car'
Zadeklarowaliśmy stałą car, która jest obiektem, następnie przy próbie przypisania do stałej car nowego obiektu, otrzymaliśmy błąd taki sam jak w przykładzie powyżej. Wszystko ok, tutaj też żadnej nowości, ten błąd jest Ci już znany. Przeanalizujmy jeszcze jeden przykład.const car = new Car('Audi', 20000);
car.name = 'Seat';
car.price = 15000;
console.log(car.name); //Seat
console.log(car.price); //15000
Tutaj prawdopodobnie stało się dla Ciebie coś niespodziewanego. Mimo, że zadeklarowaliśmy obiekt car jako stała za pomocą słowa const, to i tak zmieniliśmy wartość jego właściwości. Dlaczego tak się stało? W jednym z poprzednich artykułów poświęconych kursowi podstaw JavaScript rozmawialiśmy o tym, że obiekt nie jest typem prostym, lecz typem referencyjnym. Czyli w rzeczywistości obiekt wskazuje na jakieś konkretne miejsce w pamięci. W przykładzie gdzie otrzymaliśmy błąd przy zmianie obiektu, wystąpił on dlatego że chcieliśmy zmienić jego referencje, a to jest niedozwolone w przypadku stałych. Zmiana wartości samej właściwości, nie zmienia referencji obiektu, dzięki temu obiektom które deklarujesz jako stałe możesz zmieniać wartości właściwości.To wszystko co chciałem Ci przekazać w tym artykule. Zapraszam Cię do kolejnych artykułów z serii podstaw programowania w języku JavaScript.
Poprzedni artykuł - Klasy w JavaScript.
Następny artykuł - Programowanie zorientowane obiektowo w JavaScript.