Object.freeze e seal
Impedisca le modifiche agli oggetti.
Object.freeze e seal è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 4 lezioni in totale.
Perché congelare gli oggetti?
L'immutabilità significa che i dati non possono cambiare dopo la loro creazione. Previene le modifiche accidentali, rende il codice più facile da comprendere e impedisce intere categorie di bug.
JavaScript mette a disposizione Object.freeze e Object.seal per bloccare gli oggetti.
Nozioni di base su Object.freeze
Object.freeze rende un oggetto completamente di sola lettura: non è possibile aggiungere, rimuovere o modificare proprietà. Restituisce lo stesso oggetto, ora congelato.
const user = Object.freeze({ name: 'Ada', age: 36 });
user.age = 99;
console.log(user.age);Verificare con isFrozen
Object.isFrozen indica se un oggetto è congelato. È utile prima di tentare un aggiornamento.
const config = Object.freeze({ debug: false });
const settings = { theme: 'dark' };
console.log(Object.isFrozen(config));
console.log(Object.isFrozen(settings));Errore silenzioso o rigoroso
Nel codice non strict, le scritture su un oggetto congelato falliscono silenziosamente. In strict mode generano un TypeError. In entrambi i casi, il valore non cambia mai.
'use strict';
const frozen = Object.freeze({ x: 1 });
try {
frozen.x = 2;
} catch (e) {
console.log(e.name);
}
console.log(frozen.x);freeze impedisce di aggiungere nuove proprietà
Il congelamento impedisce anche di aggiungere proprietà. La nuova chiave semplicemente non compare.
const point = Object.freeze({ x: 0 });
point.y = 5;
console.log(point.y);
console.log(Object.keys(point));freeze impedisce l'eliminazione
Non è inoltre possibile eliminare proprietà da un oggetto congelato. La proprietà rimane al suo posto.
const obj = Object.freeze({ keep: 'me' });
delete obj.keep;
console.log(obj.keep);Object.seal è diverso
Object.seal è meno rigido di freeze. Non è possibile aggiungere o rimuovere proprietà, ma è ancora possibile modificare i valori esistenti.
const sealed = Object.seal({ count: 1 });
sealed.count = 2;
sealed.extra = 3;
console.log(sealed.count);
console.log(sealed.extra);Verificare con isSealed
Object.isSealed indica se un oggetto è sigillato. Ogni oggetto congelato è anche sigillato, ma non vale il contrario.
const sealed = Object.seal({ a: 1 });
const frozen = Object.freeze({ b: 2 });
console.log(Object.isSealed(sealed));
console.log(Object.isSealed(frozen));
console.log(Object.isFrozen(sealed));Riepilogo di freeze e seal
freeze: non è possibile aggiungere, rimuovere o modificare. seal: non è possibile aggiungere o rimuovere, ma è possibile modificare. Scelga seal quando la struttura è fissa, ma i valori possono cambiare.
const f = Object.freeze({ v: 1 });
const s = Object.seal({ v: 1 });
f.v = 100;
s.v = 100;
console.log('frozen v:', f.v);
console.log('sealed v:', s.v);preventExtensions
Il blocco meno rigido è Object.preventExtensions: non è possibile aggiungere proprietà, ma è possibile modificare e rimuovere quelle esistenti. È il più debole dei tre.
const obj = Object.preventExtensions({ a: 1 });
obj.a = 2;
obj.b = 3;
console.log(obj.a);
console.log(obj.b);
console.log(Object.isExtensible(obj));Perché è importante
Congelare configurazioni e costanti previene modifiche accidentali in tutto il codice. Ricordi però che Object.freeze è superficiale, quindi gli oggetti annidati rimangono mutabili. Questo problema verrà risolto nella prossima lezione.
const SETTINGS = Object.freeze({ maxRetries: 3 });
function tryUpdate() {
SETTINGS.maxRetries = 10;
}
tryUpdate();
console.log(SETTINGS.maxRetries);Verifica rapida
Qual è la differenza tra Object.freeze e Object.seal?
Riepilogo: freeze e seal
Ha imparato a bloccare gli oggetti:
Object.freeze: impedisce di aggiungere, rimuovere o modificare. Verifichi conisFrozen.Object.seal: impedisce di aggiungere o rimuovere, ma consente di modificare.preventExtensions: impedisce solo di aggiungere.- Tutti e tre sono superficiali, il che ci porta al congelamento profondo.
Domande Frequenti
La lezione «Object.freeze e seal» è gratuita?
Sì — il testo completo di «Object.freeze e seal» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 4 lezioni in totale.
Cosa imparerò in «Object.freeze e seal»?
Impedisca le modifiche agli oggetti. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare JavaScript Academy?
Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Object.freeze e seal»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?
Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Object.freeze e seal
- Blocco superficiale e profondo
- Pattern di aggiornamento immutabile
- structuredClone per copie profonde