Object.freeze / isFrozen în JavaScript

Obiecte ES5 (toate browserele moderne)

Îngheață un obiect: nu i se mai pot adăuga, șterge sau modifica proprietățile.

Sintaxă
Object.freeze(obiect)
Object.isFrozen(obiect)

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. const blochează doar variabila; conținutul se blochează cu Object.freeze.
  • Te aștepți ca obiectele din interior să fie înghețate și ele. Pentru asta aplică freeze recursiv.

Comenzi înrudite