Até aqui, você já trabalhou com estruturas como Object, Map e Set.

Agora vamos conhecer duas variações especiais:

  • WeakMap
  • WeakSet

Elas existem para resolver problemas específicos de memória e ciclo de vida.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender o que são referências fracas
  • Diferenciar Map de WeakMap
  • Diferenciar Set de WeakSet
  • Evitar vazamentos de memória
  • Reconhecer cenários reais de uso

Relembrando: referências em JavaScript

Objetos em JavaScript são armazenados por referência.

Enquanto existir uma referência a um objeto, ele:

  • não é removido da memória
  • não pode ser coletado pelo Garbage Collector

Isso é importante — e perigoso se mal usado.

O problema com Map e Set

Veja este exemplo:

 
  const map = new Map();
  let usuario = { nome: "Daniel" };
  map.set(usuario, "dados privados");
  usuario = null;

Mesmo após usuario = null:

  • o objeto continua existindo
  • porque o Map mantém a referência
Isso pode causar vazamento de memória.

O que é um WeakMap?

WeakMap é uma estrutura onde:

  • as chaves são objetos
  • as referências às chaves são fracas

Isso significa:

se não houver outra referência ao objeto, ele pode ser removido da memória.

Exemplo com WeakMap

 
  const weakMap = new WeakMap();
  let usuario = { nome: "Daniel" };
  weakMap.set(usuario, "dados privados");
  usuario = null;

Agora:

  • quando o objeto não for mais usado
  • ele pode ser coletado automaticamente
Você não controla quando o Garbage Collector roda — e nem precisa.

Limitações do WeakMap

Justamente por lidar com memória, o WeakMap tem restrições:

  • não é iterável
  • não possui size
  • chaves só podem ser objetos
Essas limitações são intencionais.

Caso real — dados privados por objeto

 
  const dadosPrivados = new WeakMap();
  class Usuario {
    constructor(nome) {
      dadosPrivados.set(this, { nome });
    }
    getNome() 
    {
      return dadosPrivados.get(this).nome;
    }
}
const u = new Usuario("Daniel");
console.log(u.getNome()); // Saída será: Daniel

Aqui:

  • os dados não ficam expostos
  • não há vazamento de memória

O que é um WeakSet?

WeakSet é semelhante ao Set, mas:

  • armazena apenas objetos
  • mantém referências fracas

Ele é usado quando você só precisa saber:

“esse objeto já passou por aqui?”

Exemplo com WeakSet

 
  const visitados = new WeakSet();
  let elemento = document.createElement("div");
  visitados.add(elemento);
  console.log(visitados.has(elemento)); // Saída será: true
  elemento = null;

Quando o elemento some:

  • o WeakSet não impede a coleta

Quando usar WeakMap?

  • dados privados associados a objetos
  • metadados
  • caches temporários

Quando usar WeakSet?

  • marcar objetos processados
  • evitar duplicação de processamento
  • controle de ciclo de vida

Quando NÃO usar

Não use WeakMap ou WeakSet quando:

  • você precisa iterar
  • precisa saber o tamanho
  • precisa persistir dados
Eles são ferramentas específicas — não substitutos de Map e Set.

Resumo da aula para nunca mais esquecer

  • WeakMap usa referências fracas
  • Evita vazamento de memória
  • Não é iterável
  • WeakSet marca objetos sem impedir coleta
  • Use apenas quando fizer sentido

Na próxima aula, vamos fechar esse bloco com Intl avançado, lidando com datas, números e internacionalização corretamente.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.


O primeiro jogo a fazer uso de uma Inteligência Artificial foi o Mouse in the Maze, criado em 1955, na União Soviética. Você pode saber mais sobre ele clicando aqui.


Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.