Chaves de objetos simples devem ser cadeias de caracteres, enquanto a Map
pode ter chaves de qualquer tipo.
Mas tenho pouco uso para isso na prática. Em quase todos os casos, eu me pego usando cadeias de caracteres como chaves de qualquer maneira. E presumivelmente new Map()
é mais lento que {}
. Portanto, existe alguma outra razão pela qual seria melhor usar um Map
objeto em vez de um objeto simples?
javascript
ecmascript
es6
callum
fonte
fonte
map.set('foo', 123)
realizado mais rápido queobj.foo = 123
? Se assim for isso é muito surpreendenteRespostas:
Existem algumas razões pelas quais prefiro usar
Map
s sobre objetos simples ({}
) para armazenar dados de tempo de execução (caches, etc):.size
propriedade me informa quantas entradas existem neste mapa;.clear()
,.forEach()
, etc;Todos os outros casos, como passar argumentos de função, armazenar configurações e etc, são todos escritos usando objetos simples.
Lembre-se também: não tente otimizar seu código muito cedo. Não perca seu tempo fazendo comparações entre o objeto simples e o Maps, a menos que seu projeto esteja sofrendo problemas de desempenho.
fonte
===
:)Map
usa o algoritmo SameValueZero. developer.mozilla.org/pt-BR/docs/Web/JavaScript/…Map
s usando isso ou aquilo?Não tenho certeza disso, mas acho que o desempenho NÃO é um motivo para usar o Maps. Dê uma olhada nesta página jsperf atualizada:
http://jsperf.com/es6-map-vs-object-properties/73
Parece que (ao lidar com seqüências de caracteres, pelo menos) objetos são muito mais rápidos que mapas para configuração e obtenção básicas.
fonte
As outras respostas não mencionam uma última diferença entre objetos
Map
es:Citação de MDN , ênfase minha
Essa foi a principal razão pela qual decidi usar
Map
pela primeira vez em um projeto recente. Eu tinha um objeto normal que precisava exibir em um<table>
, com cada propriedade em uma linha específica.Eu escrevi uma função para transformar um objeto em um
Map
acordo com uma ordem de chave desejada:Em seguida, o mapa pode ser iterado na ordem desejada:
É claro que isso é um pouco artificial, porque é possível exibir ao iterar a ordem da propriedade sem criar um
Map
no processo:Mas se você tem uma variedade desses objetos e os exibe em muitos lugares, primeiro faz sentido convertê-los em mapas.
fonte