Maps e Sets
A bebida fica numa Map, debaixo do nome do convidado. Os extras vão para um Set, e cada extra entra uma vez só. lida começa em tea e passa a mint. No conjunto entram mint e lemon. A linha da página é lida / mint / 2.
A página do modo estrito ficou para trás
Lá saiu ReferenceError, porque faltava um nome. Aqui nada é lançado. Chave que não existe: get devolve undefined.
A mesma chave troca a bebida
orders.set("lida", "tea") guarda a primeira bebida. orders.set("lida", "mint") não abre outra linha: o valor daquela chave é escrito por cima. size conta chaves, não quantas vezes set foi chamado.
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
console.log(orders.get("lida"));
console.log(orders.size);
No console aparece mint e depois 1. nima nunca foi guardado, então orders.get("nima") é undefined. orders.has("lida") é true. O mapa se lê com get. orders.lida e orders["lida"] são sintaxe de objeto e não leem este mapa.
A chave é o próprio objeto
Um mapa aceita um objeto como chave e fica com esse objeto, não com um texto montado dos campos. Outro objeto com os mesmos campos é outra chave.
const cup = { guest: "lida" };
const other = { guest: "lida" };
const orders = new Map();
orders.set(cup, "tea");
console.log(orders.get(cup));
console.log(orders.get(other));
console.log(orders.size);
O console mostra tea, depois undefined, depois 1. Um objeto comum transformaria as duas chaves na string "[object Object]", e a segunda escrita cobriria a primeira. O mapa não faz isso.
A mint repetida não entra de novo
Duas chamadas a add("mint") deixam uma mint só. lemon é outro valor, então size fica 2. has responde sim ou não. Não devolve o valor.
const extras = new Set();
extras.add("mint");
extras.add("mint");
extras.add("lemon");
console.log(extras.size);
console.log(extras.has("lemon"));
O console mostra 2 e depois true. new Set(["mint", "mint", "lemon"]) monta o mesmo conjunto: a cópia de mint já sumiu. Um set só tem valores. Não guarda bebida debaixo de um convidado.
delete tira uma entrada
Se removeu algo, delete devolve true. Se o valor não estava, devolve false e o conjunto continua como estava.
const extras = new Set(["mint", "lemon"]);
console.log(extras.delete("lemon"));
console.log(extras.size);
console.log(extras.has("lemon"));
O console mostra true, depois 1, depois false. mint continua lá. Um mapa também tem delete e has, mas eles usam a chave: orders.delete("lida") tira esse convidado.
O que a página escreve
A bebida de lida é trocada, o conjunto nasce de três palavras, e saem convidado, bebida e size.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
const extras = new Set(["mint", "mint", "lemon"]);
const line = document.querySelector("#line");
line.textContent = "lida / " + orders.get("lida") + " / " + extras.size;
</script>
</body>
</html>
A linha se lê lida / mint / 2. O primeiro set para tea não aparece. A mint repetida não aumenta size. ReferenceError era a linha do modo estrito.
Cinco passos no balcão
- Ponha lida em tea e depois em mint. get("lida") é mint e size é 1.
- Guarde tea sob cup. get(other) é undefined e size continua 1.
- Acrescente mint, mint e lemon. size é 2 e has("lemon") é true.
- Apague lemon. size é 1 e has("lemon") é false.
- Leia a página. A linha é lida / mint / 2.
O que confunde, e o que fica
Um segundo set na mesma chave atualiza. Um segundo add do mesmo extra é ignorado.
- Não leia o mapa com orders["lida"]
- Dois objetos parecidos não são uma chave só
- has não devolve a bebida
- new Set já descarta as cópias
- Não leia a linha como ReferenceError
Para guardar
- set substitui e size fica
- chaves objeto são os próprios objetos
- um set guarda cada valor uma vez
- delete remove uma entrada
- a linha da página é lida / mint / 2
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo