0Pricing
JavaScript Academy · Aula

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 com isFrozen.
  • 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

  1. Object.freeze e seal
  2. Congelamento superficial versus profundo
  3. Padrões de atualização imutável
  4. structuredClone para cópias profundas
← Voltar para JavaScript Academy