Podsumowanie:
const
i Object.freeze()
służą zupełnie innym celom.
const
służy do deklarowania zmiennej, która musi zostać przypisana od razu i nie może być ponownie przypisana. zmienne zadeklarowane przez const
mają zakres blokowy, a nie zakres funkcji, jak zmienne zadeklarowane za pomocąvar
Object.freeze()
jest metodą, która akceptuje obiekt i zwraca ten sam obiekt. Teraz nie można usunąć żadnych właściwości obiektu ani dodać nowych właściwości.
Przykłady const
:
Przykład 1: nie można ponownie przypisać const
Poniższy kod zgłasza błąd, ponieważ próbujemy ponownie przypisać zmienną foo, która została zadeklarowana za pomocą const
słowa kluczowego, nie możemy jej ponownie przypisać.
Przykład 2: Struktury danych, do których są przypisane, const
można modyfikować
const object = {
prop1: 1,
prop2: 2
}
object.prop1 = 5;
object.prop3 = 3;
console.log(object);
W tym przykładzie deklarujemy zmienną za pomocą const
słowa kluczowego i przypisujemy do niej obiekt. Chociaż nie możemy ponownie przypisać tej zmiennej o nazwie object, możemy zmutować sam obiekt. Jeśli zmienimy istniejące właściwości lub dodamy nowe właściwości, będzie to miało skutek. Aby wyłączyć wszelkie zmiany w obiekcie, których potrzebujemy Object.freeze()
.
Przykłady Object.freeze()
:
Przykład 1: Nie można zmutować zamrożonego obiektu
object1 = {
prop1: 1,
prop2: 2
}
object2 = Object.freeze(object1);
console.log(object1 === object2);
object2.prop3 = 3;
delete object2.prop1;
console.log(object2);
W tym przykładzie, gdy wywołujemy Object.freeze()
i podajemy object1
jako argument, funkcja zwraca obiekt, który jest teraz „zamrożony”. Jeśli porównamy odniesienie nowego obiektu do starego obiektu za pomocą ===
operatora, możemy zauważyć, że odnoszą się one do tego samego obiektu. Również, gdy próbujemy dodać lub usunąć jakiekolwiek właściwości, widzimy, że nie ma to żadnego efektu (w trybie ścisłym pojawi się błąd).
Przykład 2: Obiekty z odniesieniami nie są w pełni zamrożone
const object = {
prop1: 1,
nestedObj: {
nestedProp1: 1,
nestedProp2: 2,
}
}
const frozen = Object.freeze(object);
frozen.prop1 = 5;
frozen.nestedObj.nestedProp1 = 5;
console.log(frozen);
Ten przykład pokazuje, że właściwości obiektów zagnieżdżonych (i innych przez referencyjne struktury danych) są nadal modyfikowalne . Więc Object.freeze()
nie „zamraża” w pełni obiektu, gdy ma właściwości, które są referencjami (np. Tablice, obiekty).