--- 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 ---
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.
new Map([iterable])
iterableUn objecte Map pot iterar els seus elements en ordre d'inserció - un bucle for..of retornarà un array de [key, value] per cada iteració.
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.
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.
Object té un prototipus, això implica que hi haurà algunes claus definides inicialment. Aquest problem es pot adreçar utilitzant map = Object.create(null).Object són {{jsxref("String", "Strings")}}, mentre que les claus d'un Map poden ser de qualsevol tipus.Map mentre que el tamany d'un Object ha de ser calculat manualment.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.
Map.lengthlength és 1.Map. Permet afegir propietats a tots els objectes de tipus Map.MapTotes les instàncies de Map hereten de {{jsxref("Map.prototype")}}.
{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Propietats')}}
{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Mètodes')}}
Mapvar 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 () {}
NaN com a claus en un MapNaN 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"
Maps amb for..ofEls 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"
Arrayvar 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"]
| Especificació | Estat | Comentaris |
|---|---|---|
| {{SpecName('ES6', '#sec-map-objects', 'Map')}} | {{Spec2('ES6')}} | Definició inicial. |
{{ CompatibilityTable() }}
| Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Suport bàsic |
{{ CompatChrome(31) }} [1] |
{{ 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”.