Tempo de leitura: menos de 1 minuto
Neste post, irei resumidamente falar um pouco sobre Map e WeakMap, que são novas coleções que entraram no EcmaScript 6.
Map
Map é uma coleção de dados de chave e valor, onde sua chave é única na coleção, podendo haver um valor associado à ela. Os valores dentro de um mapa podem se repetir.
Mapas nos permitem:
- Adicionar elementos pelo par, chave e valor;
- Buscar elementos através da chave;
- Descobrir se um elemento pertence ou não àquela coleção através da chave;
- Remover elementos através da chave.
No JavaScript, objetos e mapas são extremamente parecidos, pois ambos são baseados em chave e valor, sendo que a chave é o nome do atributo e o valor podendo ser objetos, funções e expressões.

Métodos de Map
- set()
É possível incluir qualquer tipo de valor como chave ou valor em um mapa em JavaScript, podendo ser valores primitivos, objetos ou funções.
Para adicionar elementos em um mapa, utilizamos o método set().
https://gist.github.com/mateusmarquezini/42a2af4de77fa7ed2e2804a0cad3228b
https://gist.github.com/mateusmarquezini/71d5c5730fb8b74309487ce09cb2cffe.js
- size()
Para sabermos o tamanho do mapa com seus elementos, utilizamos o método size()
https://gist.github.com/mateusmarquezini/5e7a8d1d5ab6d9d2872192e5f67c8735
- has()
Podemos também descobrir se uma determinada chave já existe associada a algum valor no mapa utilizando o método has(). Caso exista, o método retorna true, caso contrário, false.
https://gist.github.com/mateusmarquezini/2222b02d4db54df77d5ef1f8023b1d71
- delete()
Para removermos um elemento específico de um mapa, utilizamos o método delete(). Basta usarmos como parâmetro do método a chave do registro a ser removido.
Após a execução, você pode garantir que o elemento foi removido com sucesso utilizando o método has() novamente.
https://gist.github.com/mateusmarquezini/d62b9f194447fbe28c4d251cd760ff59
Map é um objeto iterável e com isso é possível utilizar o laço de repetição for .. of para iteração através dos métodos abaixo:
- keys()
Exibe as chaves dos elementos de um mapa.
https://gist.github.com/mateusmarquezini/d8d98c899d48ad10927b64b957fd1f01
Saída:

- values()
Exibe os valores dos elementos de um mapa.
https://gist.github.com/mateusmarquezini/1624b115141034f5ee56b4e7346501dc
Saída:
- entries()
Diferente dos métodos acima, o entries() lhe dá uma visão geral dos elementos de um mapa em formato de chave e valor.
https://gist.github.com/mateusmarquezini/36e2d48651801ab13f73d1d32df54131
Saída:

- clear()
Por fim, caso seja necessário realizar a remoção de todos os elementos de um mapa, basta utilizar o método clear().
Para checarmos se os elementos foram removidos, podemos invocar o método size()
https://gist.github.com/mateusmarquezini/6e59cf0629c521e1b63ba102da71cfba
WeakMap
Assim como Map, o WeakMap é uma coleção de dados de chave e valor e sua diferença é que ele não permite que qualquer valor seja usado como chave de seus registros, e sim, apenas objetos.
Esses objetos, até então, não são fortemente mantidos e, portanto, caso não haja nenhuma outra referência a esses objetos, o Garbage Collector pode agir destruindo esses objetos inutilizáveis na memória, liberando, assim, espaço para novos processos.
https://gist.github.com/mateusmarquezini/f90cfd7f3839fd152364368a46dd78a1
Caso a referência local de um objeto já existente dentro de um WeakMap for removido, não será mais possível buscar seu valor através da chave.
https://gist.github.com/mateusmarquezini/b141cf2aaffd4d09521b8c65526ed038
Lembrando que não é possível adicionar outro valor como chave além de objetos. Caso haja uma tentativa, um erro é exibido no console.
https://gist.github.com/mateusmarquezini/0fb4a8e55d80ef3371b2066b4a3569d8
Saída:

Métodos de WeakMap
WeakMap não possui todos os métodos existentes em Map. Os métodos que há em comum entre as duas coleções são: has(), delete(), get() e set(). Todos aqui possuem o mesmo comportamento entre as duas coleções, ou seja, os comportamentos dos métodos em Map são os mesmos para WeakMap.
Como deve se perceber nos métodos acima, não temos a possibilidade de utilizarmos o método clear() para removermos todos os elementos de um WeakMap, nem mesmo temos uma visão geral da coleção com o método entries().
Para mais informações, exemplos e referências acesse: Map – MDN / WeakMap – MDN