Les clés d'objet standard doivent être des chaînes, alors qu'un Map
peut avoir des clés de n'importe quel type.
Mais j'ai peu d'utilité pour cela dans la pratique. Dans presque tous les cas, je me retrouve quand même à utiliser des chaînes comme clés. Et new Map()
est probablement plus lent que {}
. Alors, y a-t-il une autre raison pour laquelle il serait peut-être préférable d'utiliser un Map
objet simple au lieu d'un simple?
javascript
ecmascript
es6
callum
la source
la source
map.set('foo', 123)
exécuté plus vite queobj.foo = 123
? Si c'est très surprenantRéponses:
Il existe certaines raisons pour lesquelles je préfère utiliser
Map
s plutôt que des objets simples ({}
) pour stocker des données d'exécution (caches, etc.):.size
propriété me permet de savoir combien d'entrées existent dans cette carte;.clear()
,.forEach()
, etc;Tous les autres cas, comme passer des arguments de fonction, stocker des configurations, etc., sont tous écrits en utilisant des objets simples.
Rappelez-vous également: n'essayez pas d'optimiser votre code trop tôt. Ne perdez pas votre temps à faire des points de repère entre un objet simple et Cartes, sauf si votre projet souffre de problèmes de performances.
la source
===
:)Map
utilise l'algorithme SameValueZero. developer.mozilla.org/en-US/docs/Web/JavaScript/…Map
utilisation de ceci ou de cela?Je ne suis pas sûr de cela, mais je pense que les performances ne constituent PAS une raison pour utiliser Maps. Jetez un oeil à cette page jsperf mise à jour:
http://jsperf.com/es6-map-vs-object-properties/73
Il semble que (quand il s'agit de chaînes au moins), les objets sont beaucoup plus rapides que les cartes pour le paramétrage de base et l'obtention.
la source
Les autres réponses ne mentionnent pas une dernière différence entre les objets et
Map
s:Citation de MDN , mon accentuation
C'est la raison principale pour laquelle j'ai décidé d'utiliser
Map
pour la première fois un projet récent. J'avais un objet normal que je devais afficher dans un<table>
, avec chaque propriété allant dans une ligne spécifique.J'ai écrit une fonction pour transformer un objet en
Map
fonction d'un ordre de clé souhaité:Ensuite, la carte pourrait être itérée dans l'ordre souhaité:
Bien sûr, ceci est un peu artificiel car on pourrait tout aussi bien afficher lors d'une itération sur l'ordre des propriétés sans créer
Map
de processus en cours:Mais si vous avez un tableau de ces objets et que vous les affichez à plusieurs endroits, il est alors logique de les convertir tous en cartes.
la source