Ce face Object.freeze / isFrozen
După Object.freeze, orice încercare de schimbare este ignorată (sau aruncă TypeError în modul strict, de exemplu în module). Este util pentru constante și configurări care nu trebuie modificate din greșeală.
Înghețarea este superficială: obiectele din interior pot fi modificate în continuare. Object.isFrozen verifică dacă un obiect este înghețat.
Parametri
| Parametru | Descriere |
|---|---|
obiect |
Obiectul înghețat sau verificat. |
Ce returnează
freeze: același obiect. isFrozen: true sau false.
Exemple
Exemplul 1: Constante protejate
Exemplele rulează ca modul (mod strict), deci scrierea într-un obiect înghețat aruncă eroare.
const STARI = Object.freeze({ NOUA: "nouă", PLATITA: "plătită" });
try {
STARI.NOUA = "altceva";
} catch (e) {
console.log(e.constructor.name);
}
console.log(STARI.NOUA, Object.isFrozen(STARI));
Rezultat
TypeError
nouă true
Exemplul 2: Înghețarea este superficială
const config = Object.freeze({ server: { port: 8080 } });
config.server.port = 3000;
console.log(config.server.port);
console.log(Object.isFrozen(config.server));
Rezultat
3000
false
Greșeli frecvente
- Crezi că
constîngheață obiectul.constblochează doar variabila; conținutul se blochează cuObject.freeze. - Te aștepți ca obiectele din interior să fie înghețate și ele. Pentru asta aplică
freezerecursiv.
Comenzi înrudite
Object.seal / preventExtensions: Blochează adăugarea de proprietăți noi (preventExtensions) și ștergerea celor existente (seal).let / const: Declară variabile: let pentru valori care se schimbă, const pentru valori care rămân la fel.Object.defineProperty / defineProperties: Definește o proprietate cu control total: dacă poate fi modificată, afișată în bucle sau ștearsă, plus get/set.