Las claves de objetos simples deben ser cadenas, mientras que una Map
puede tener claves de cualquier tipo.
Pero tengo poco uso para esto en la práctica. En casi todos los casos, me encuentro usando cadenas como teclas de todos modos. Y presumiblemente new Map()
es más lento que {}
. Entonces, ¿hay alguna otra razón por la que podría ser mejor usar un objeto en Map
lugar de un simple?
javascript
ecmascript
es6
callum
fuente
fuente
map.set('foo', 123)
realizó más rápido queobj.foo = 123
? Si es así, eso es muy sorprendenteRespuestas:
Hay algunas razones por las que prefiero usar
Map
s sobre objetos simples ({}
) para almacenar datos de tiempo de ejecución (cachés, etc.):.size
propiedad me permite saber cuántas entradas existen en este Mapa;.clear()
,.forEach()
, etc;Todos los demás casos, como pasar argumentos de funciones, almacenar configuraciones, etc., se escriben utilizando objetos simples.
Además, recuerde: no intente optimizar su código demasiado pronto. No pierda su tiempo haciendo puntos de referencia de objetos simples frente a Maps a menos que su proyecto esté sufriendo problemas de rendimiento.
fuente
===
:)Map
usa el algoritmo SameValueZero. developer.mozilla.org/en-US/docs/Web/JavaScript/…Map
s usando esto o aquello?No estoy seguro de esto, pero creo que el rendimiento NO es una razón para usar Maps. Eche un vistazo a esta página actualizada de jsperf:
http://jsperf.com/es6-map-vs-object-properties/73
Parece que (cuando se trata de cadenas al menos) los objetos son mucho más rápidos que los mapas para la configuración básica y la obtención.
fuente
Las otras respuestas no mencionan una última diferencia entre objetos
Map
ys:Cita de MDN , énfasis mío
Esta fue la razón principal por la que decidí usar
Map
por primera vez en un proyecto reciente. Tenía un objeto normal que necesitaba mostrar en un<table>
, con cada propiedad yendo en una fila específica.Escribí una función para transformar un objeto en un
Map
orden de teclas deseado:Luego, el mapa podría repetirse en el orden deseado:
Por supuesto, esto es un poco artificial porque uno podría mostrarse al iterar sobre el orden de las propiedades sin crear un
Map
en el proceso:Pero si tiene una variedad de tales objetos y los va a mostrar en muchos lugares, entonces convertirlos a mapas primero tiene sentido.
fuente