Até aqui, você já trabalhou com estruturas como Object, Map e Set.
Agora vamos conhecer duas variações especiais:
WeakMapWeakSet
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
MapdeWeakMap - Diferenciar
SetdeWeakSet - 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
Mapmantém a referência
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
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
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
WeakSetnã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
Resumo da aula para nunca mais esquecer
WeakMapusa referências fracas- Evita vazamento de memória
- Não é iterável
WeakSetmarca 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.
Você Sabia?
Música tema do Blanka
Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.
Tetris
O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.
Asteroids
O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.
Mouse
O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.
Galaxy Game
As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.










