--- title: Map slug: Web/JavaScript/Reference/Global_Objects/Map translation_of: Web/JavaScript/Reference/Global_Objects/Map original_slug: Web/JavaScript/Referencia/Objectes_globals/Map ---
{{JSRef("Global_Objects", "Map")}}

Resum

L'objecte Map és un simple mapa de parelles clau/valor. Qualsevol valor (tant objectes com {{Glossary("Primitive", "primitive values")}}) poden fer-se servir tant com a clau com a valor.

Sintaxi

new Map([iterable])

Paràmetres

iterable
Iterable és un Array o un altre objecte iterable els quals els seus elements són parelles clau/valor (Arrays de 2 elements). Cada parella clau/valor serà afegida al nou mapa. nul és tracta com a indefinit.

Descripció

Un objecte Map pot iterar els seus elements en ordre d'inserció - un bucle for..of retornarà un array de [key, value] per cada iteració.

Igualtat de claus

La igualtat de claus es basa en l'algorisme "mateix valor": NaN es considera igual a NaN (tot i que NaN !== NaN) i tots els altres valors es consideren iguals d'acord amb la semàntica de l'operador ===. En versions anteriors a l'esborrany de l'ECMAScript 6 -0 i +0 es consideraven diferents (tot i que -0 === +0), aquest comportament s'ha canviat en versions posteriors i ha sigut adaptat al {{geckoRelease("29")}} ({{bug("952870")}}) i una versió diària de Chrome.

Comparació d'objectes amb mapes

Els {{jsxref("Object", "Objects")}} son similars als Maps en el sentit que tots dos permeten assignar valors a claus, obtenir aquests valors, esborrar claus i detectar si una clau té un valor assignat o no. Degut a això, històricament s'han fet anar Objects com a Maps; tot i això existeixen diferències importants entre Objects i Maps que fan que l'ús de Map sigui millor.

Utilitzeu mapes en comptes d'objejctes quan les claus no se sàpiguin en temps d'execució, o bé quan totes les claus o els valors siguin del mateix tipus.

Utilitzeu objectes quan hi hagi una lògica que operi els elements individualment.

Propietats

Map.length
El valor de la propietat length és 1.
{{jsxref("Map.prototype")}}
Representa el prototipus pel constructor Map. Permet afegir propietats a tots els objectes de tipus Map.

Instàncies de Map

Totes les instàncies de Map hereten de {{jsxref("Map.prototype")}}.

Propietats

{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Propietats')}}

Mètodes

{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Mètodes')}}

Exemples

Exemple: Utilitzar l'objecte Map

var myMap = new Map();

var keyObj = {},
    keyFunc = function () {},
    keyString = "a string";

// preparar els valors
myMap.set(keyString, "valor associat a amb 'un string'");
myMap.set(keyObj, "valor associat amb keyObj");
myMap.set(keyFunc, "valor associat amb with keyFunc");

myMap.size; // 3

// obtenir els valors
myMap.get(keyString);    // "valor associat amb 'un string'"
myMap.get(keyObj);       // "valor associat amb keyObj"
myMap.get(keyFunc);      // "valor associat amb keyFunc"

myMap.get("a string");   // "valor associat amb 'un string'"
                         // com que keyString === 'un string'
myMap.get({});           // undefined, perquè keyObj !== {}
myMap.get(function() {}) // undefined, perquè keyFunc !== function () {}

Exemple: Utilitzar NaN com a claus en un Map

NaN també pot emprar-se com a clau. Tot i que NaN no és igual a si mateix (NaN !== NaN és cert), l'exemple següent funciona perquè els NaNs són indistinguibles entre ells:

var myMap = new Map();
myMap.set(NaN, "no un nombre");

myMap.get(NaN); // "no un nombre"

var altreNaN = Number("foo");
myMap.get(altreNaN); // "no un nombre"

Exemple: Iterar Maps amb for..of

Els mapes es poden iterar fent servir un bucle for..of :

var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "un");
for (var [key, value] of myMap) {
  alert(key + " = " + value);
}
// Mostrarà 2 alertes; el primer amb "0 = zero" i el segon amb "1 = one"

for (var key of myMap.keys()) {
  alert(key);
}
// Mostrarà 2 alertes; el primer amb "0" i el segon amb "1"

for (var value of myMap.values()) {
  alert(value);
}
// Mostrarà 2 alertes; el primer amb "zero" i el segon amb "un"

for (var [key, value] of myMap.entries()) {
  alert(key + " = " + value);
}
// Mostrarà 2 alertes; el primer amb "0 = zero" i el segon amb "1 = un"

myMap.forEach(function(value, key) {
  alert(key + " = " + value);
}, myMap)
// Mostrarà 2 alertes; el primer amb "0 = zero" i el segon amb "1 = un"

Exemple: Relació amb els objectes Array

var kvArray = [["clau1", "valor1"], ["clau2", "valor2"]];

// Utilitzeu el constructor de Map normal per a transformar un Array 2D clau-valor en un mapa
var myMap = new Map(kvArray);

myMap.get("valor1"); // retorna "valor1"

// Utilitzeu l'operador spread per a transformar un mapa en un Array 2D clau-valor.
alert(uneval([...myMap])); // Mostrarà exactament el mateix Array que kvArray

// O bé utilitzeu l'operador spread a l'iterador de les claus o els valor per a obtenir
// un array de només les claus o els valors
alert(uneval([...myMap.keys()])); // Mostrarà ["clau1", "clau2"]

Especificacions

Especificació Estat Comentaris
{{SpecName('ES6', '#sec-map-objects', 'Map')}} {{Spec2('ES6')}} Definició inicial.

Compatibilitat amb navegadors

{{ CompatibilityTable() }}

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suport bàsic

{{ CompatChrome(31) }} [1]
{{ CompatChrome(38) }}

{{ CompatGeckoDesktop("13") }} 11 25 7.1
Argument del constructor: new Map(iterable) {{ CompatChrome(38) }} {{ CompatGeckoDesktop("13") }} {{ CompatNo() }} 25 {{ CompatNo() }}
iterable {{ CompatChrome(38) }} {{ CompatGeckoDesktop("17") }} {{ CompatNo() }} 25 7.1
Map.clear() {{ CompatChrome(31) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoDesktop("19")}} 11 25 7.1
Map.keys(), Map.values(), Map.entries() {{ CompatChrome(37) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoDesktop("20")}} {{ CompatNo() }} 25 7.1
Map.forEach() {{ CompatChrome(36) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoDesktop("25")}} 11 25 7.1
Igualtat de claus per a -0 i 0 {{ CompatChrome(34) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoDesktop("29")}} {{ CompatNo() }} 25 {{ CompatNo() }}
Argument del constructor: new Map(null) {{ CompatVersionUnknown() }} {{CompatGeckoDesktop("37")}} {{ CompatUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }}
Monkey-patched set() al Constructor {{ CompatVersionUnknown() }} {{CompatGeckoDesktop("37")}} {{ CompatUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }}
Característica Android Chrome per Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{ CompatNo() }} {{ CompatChrome(31) }} [1]
{{ CompatChrome(38) }}
{{ CompatGeckoMobile("13") }} {{ CompatNo() }} {{ CompatNo() }} iOS 8
Argument del constructor: new Map(iterable) {{ CompatNo() }} {{ CompatChrome(38) }} {{ CompatGeckoMobile("13") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo }}
iterable {{ CompatNo() }} {{ CompatNo() }} {{ CompatGeckoMobile("17") }} {{ CompatNo() }} {{ CompatNo() }} iOS 8
Map.clear() {{ CompatNo() }} {{ CompatChrome(31) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoMobile("19")}} {{ CompatNo() }} {{ CompatNo() }} iOS 8
Map.keys(), Map.values(), Map.entries() {{ CompatNo() }} {{ CompatChrome(37) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoMobile("20")}} {{ CompatNo() }} {{ CompatNo() }} iOS 8
Map.forEach() {{ CompatNo() }} {{ CompatChrome(36) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoMobile("25")}} {{ CompatNo() }} {{ CompatNo() }} iOS 8
Igualtat per a -0 i 0 {{ CompatNo() }} {{ CompatChrome(34) }} [1]
{{ CompatChrome(38) }}
{{CompatGeckoMobile("29")}} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
Argument del constructor: new Map(null) {{ CompatUnknown() }} {{ CompatVersionUnknown() }} {{CompatGeckoMobile("37")}} {{ CompatUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }}
Monkey-patched set() al Constructor {{ CompatUnknown() }} {{ CompatVersionUnknown() }} {{CompatGeckoMobile("37")}} {{ CompatUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }}

[1] The feature is available behind a preference. In chrome://flags, activate the entry “Enable Experimental JavaScript”.

Vegeu també