Object.freeze e seal
Impeça alterações nos objetos.
Object.freeze e seal é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.
Por que congelar objetos?
Imutabilidade significa que os dados não podem ser alterados depois da criação. Isso evita mutações acidentais, facilita a compreensão do código e previne classes inteiras de erros.
JavaScript oferece Object.freeze e Object.seal para bloquear objetos.
Fundamentos de Object.freeze
Object.freeze torna um objeto totalmente somente leitura: você não pode adicionar, remover nem alterar propriedades. Ele retorna o mesmo objeto, agora frozen.
const user = Object.freeze({ name: 'Ada', age: 36 });
user.age = 99;
console.log(user.age);Verificando com isFrozen
Object.isFrozen informa se um objeto está frozen. É útil antes de tentar uma atualização.
const config = Object.freeze({ debug: false });
const settings = { theme: 'dark' };
console.log(Object.isFrozen(config));
console.log(Object.isFrozen(settings));Falha silenciosa versus estrita
No código não estrito, as escritas em um objeto frozen falham de modo silencioso. No modo estrito, elas lançam um TypeError. De qualquer forma, o valor nunca é alterado.
'use strict';
const frozen = Object.freeze({ x: 1 });
try {
frozen.x = 2;
} catch (e) {
console.log(e.name);
}
console.log(frozen.x);freeze bloqueia novas propriedades
O congelamento também impede a ação de adicionar propriedades. O novo key simplesmente não aparece.
const point = Object.freeze({ x: 0 });
point.y = 5;
console.log(point.y);
console.log(Object.keys(point));freeze bloqueia exclusões
Você também não pode excluir propriedades de um objeto frozen. A propriedade permanece no lugar.
const obj = Object.freeze({ keep: 'me' });
delete obj.keep;
console.log(obj.keep);Object.seal é diferente
Object.seal é menos rigoroso que freeze. Você não pode adicionar nem remover propriedades, mas ainda pode alterar valores existentes.
const sealed = Object.seal({ count: 1 });
sealed.count = 2;
sealed.extra = 3;
console.log(sealed.count);
console.log(sealed.extra);Verificando com isSealed
Object.isSealed informa se um objeto está sealed. Observe que todo objeto frozen também está sealed, mas o inverso não é verdadeiro.
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));Resumo de freeze versus seal
freeze: não adicionar, não remover, não alterar. seal: não adicionar, não remover, mas é permitido alterar. Escolha seal quando a estrutura for fixa, mas os valores evoluírem.
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
O bloqueio menos rigoroso é Object.preventExtensions: você não pode adicionar propriedades, mas pode alterar e excluir as existentes. É o mais fraco dos três.
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));Por que isso é importante
Congelar configurações e constantes compartilhadas evita edições acidentais em toda a base de código. Mas lembre-se: Object.freeze é superficial, portanto os objetos aninhados continuam mutáveis. Você corrigirá isso a seguir.
const SETTINGS = Object.freeze({ maxRetries: 3 });
function tryUpdate() {
SETTINGS.maxRetries = 10;
}
tryUpdate();
console.log(SETTINGS.maxRetries);Verificação rápida
Qual é a diferença entre Object.freeze e Object.seal?
Recapitulação: freeze e seal
Você aprendeu a bloquear objetos:
Object.freeze: não permite adicionar, remover ou alterar. Verifique comisFrozen.Object.seal: não permite adicionar nem remover, mas permite alterar.preventExtensions: bloqueia apenas a adição.- Os três são superficiais, o que nos leva ao congelamento profundo.
Perguntas Frequentes
A aula “Object.freeze e seal” é grátis?
Sim — o texto completo de “Object.freeze e seal” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.
O que vou aprender em “Object.freeze e seal”?
Impeça alterações nos objetos. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar JavaScript Academy?
Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Object.freeze e seal”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de JavaScript Academy?
Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Object.freeze e seal
- Congelamento superficial versus profundo
- Padrões de atualização imutável
- structuredClone para cópias profundas