Get to know MDN better
Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.
Este capítulo presenta colecciones de datos que están indexadas por una clave; los objetos Map y Set contienen elementos que son iterables en el orden de inserción.
ECMAScript 2015 introduce una nueva estructura de datos para asociar claves con valores. Un objeto Map es un mapa de clave/valor simple y puedes iterar sobre sus elementos en el orden en que fueron insertados.
El siguiente código muestra algunas operaciones básicas con un Map. Consulta también la página de referencia de Map para obtener más ejemplos y la API completa. Puedes usar un bucle for...of para devolver un arreglo de [key, value] para cada iteración.
Tradicionalmente, los objetos se han utilizado para asignar cadenas a valores. Los objetos te permiten establecer claves a valores, recuperar esos valores, eliminar claves y detectar si algo está almacenado en una clave. Los objetos Map, sin embargo, tienen algunas ventajas más que los hacen mejores mapas.
Estos tres consejos te pueden ayudar a decidir si usar un Map o un Object:
El objeto WeakMap es una colección de pares clave/valor en la que las claves solo son objetos y los valores pueden ser valores arbitrarios. Las referencias de objeto en las claves se mantienen débilmente, lo que significa que son un objetivo de recolección de basura (GC por Garbage Collection) si ya no hay otra referencia al objeto. La API de WeakMap es la misma que la API de Map.
Una diferencia con los objetos Map es que las claves en WeakMap no son enumerables (es decir, no hay ningún método que te proporcione una lista de las claves). Si lo hubiera, la lista dependería del estado de la recolección de basura, introduciendo el no determinismo.
Para obtener más información y código de ejemplo, consulta también "¿Por qué mapa Débil?" en la página de referencia de WeakMap.
Un caso de uso de los objetos WeakMap es almacenar datos privados para un objeto u ocultar detalles de implementación. El siguiente ejemplo es de la publicación del blog de Nick Fitzgerald "Ocultar detalles de implementación con WeakMaps de ECMAScript 6". Los datos y métodos privados pertenecen al objeto y se almacenan en privates del objeto WeakMap. Todo lo expuesto en la instancia y el prototipo es público; todo lo demás es inaccesible desde el mundo exterior porque privates no se exporta desde el módulo.
Los objetos Set son colecciones de valores. Puedes iterar sus elementos en el orden en que se insertaron. Un valor en un Set solo puede aparecer una vez; es único en la colección del Set.
El siguiente código muestra algunas operaciones básicas con un Set. Además, consulta la página de referencia de Set para obtener más ejemplos y la API completa.
Puedes crear un Array a partir de un Set usando Array.from o el operador de propagación. Además, el constructor Set acepta un Array para convertirlo en la otra dirección.
Nota: Recuerda que los objetos Set almacenan valores únicos, por lo que cualquier elemento duplicado de un arreglo se elimina al realizar la conversión.
Tradicionalmente en muchas situaciones, un conjunto de elementos se ha almacenado en arreglos de JavaScript. Sin embargo, el nuevo objeto Set tiene algunas ventajas:
Los objetos WeakSet son colecciones de objetos. Un objeto en el WeakSet solo puede aparecer una vez. Es único en la colección WeakSet y los objetos no son enumerables.
Las principales diferencias con el objeto Set son:
Los casos de uso de los objetos WeakSet son limitados. No perderán memoria, por lo que puede ser seguro usar elementos DOM como clave y marcarlos con fines de seguimiento, por ejemplo.
Tanto la igualdad de claves de los objetos Map como la igualdad de valores de los objetos Set se basan en "algoritmo del mismo valor cero":
This page was last modified on 8 dic 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.