diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:41:15 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:41:15 -0500 |
commit | 4b1a9203c547c019fc5398082ae19a3f3d4c3efe (patch) | |
tree | d4a40e13ceeb9f85479605110a76e7a4d5f3b56b /files/ca/web/javascript/referencia/objectes_globals/map/index.html | |
parent | 33058f2b292b3a581333bdfb21b8f671898c5060 (diff) | |
download | translated-content-4b1a9203c547c019fc5398082ae19a3f3d4c3efe.tar.gz translated-content-4b1a9203c547c019fc5398082ae19a3f3d4c3efe.tar.bz2 translated-content-4b1a9203c547c019fc5398082ae19a3f3d4c3efe.zip |
initial commit
Diffstat (limited to 'files/ca/web/javascript/referencia/objectes_globals/map/index.html')
-rw-r--r-- | files/ca/web/javascript/referencia/objectes_globals/map/index.html | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/files/ca/web/javascript/referencia/objectes_globals/map/index.html b/files/ca/web/javascript/referencia/objectes_globals/map/index.html new file mode 100644 index 0000000000..8e2bb647bd --- /dev/null +++ b/files/ca/web/javascript/referencia/objectes_globals/map/index.html @@ -0,0 +1,385 @@ +--- +title: Map +slug: Web/JavaScript/Referencia/Objectes_globals/Map +translation_of: Web/JavaScript/Reference/Global_Objects/Map +--- +<div>{{JSRef("Global_Objects", "Map")}}</div> + +<h2 id="Resum">Resum</h2> + +<p>L'objecte <strong><code>Map</code></strong> é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.</p> + +<h2 id="Syntax" name="Syntax">Sintaxi</h2> + +<pre class="syntaxbox"><code>new Map([iterable]) +</code></pre> + +<h3 id="Parameters" name="Parameters">Paràmetres</h3> + +<dl> + <dt><code>iterable</code></dt> + <dd>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.</dd> +</dl> + +<h2 id="Description" name="Description">Descripció</h2> + +<p>Un objecte Map pot iterar els seus elements en ordre d'inserció - un bucle <code>for..of</code> retornarà un array de <code>[key, value]</code> per cada iteració.</p> + +<h3 id="Igualtat_de_claus">Igualtat de claus</h3> + +<p>La igualtat de claus es basa en l'algorisme "mateix valor": <code>NaN</code> es considera igual a <code>NaN</code> (tot i que <code>NaN !== NaN</code>) i tots els altres valors es consideren iguals d'acord amb la semàntica de l'operador <code>===</code>. En versions anteriors a l'esborrany de l'ECMAScript 6 <code>-0</code> i <code>+0</code> es consideraven diferents (tot i que <code>-0 === +0</code>), aquest comportament s'ha canviat en versions posteriors i ha sigut adaptat al {{geckoRelease("29")}} ({{bug("952870")}}) i una <a href="https://code.google.com/p/v8/issues/detail?id=3069">versió diària de Chrome</a>.</p> + +<h3 id="Comparació_d'objectes_amb_mapes">Comparació d'objectes amb mapes</h3> + +<p>Els {{jsxref("Object", "Objects")}} son similars als <code>Maps</code> 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 <code>Objects</code> com a <code>Maps</code>; tot i això existeixen diferències importants entre <code>Objects</code> i <code>Maps</code> que fan que l'ús de <code>Map</code> sigui millor.</p> + +<ul> + <li>Un <code>Object</code> té un prototipus, això implica que hi haurà algunes claus definides inicialment. Aquest problem es pot adreçar utilitzant <code>map = Object.create(null)</code>.</li> + <li>Les claus d'un <code>Object</code> són {{jsxref("String", "Strings")}}, mentre que les claus d'un <code>Map</code> poden ser de qualsevol tipus.</li> + <li>És fàcil obtindre el tamany d'un <code>Map</code> mentre que el tamany d'un <code>Object</code> ha de ser calculat manualment.</li> +</ul> + +<p>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.</p> + +<p>Utilitzeu objectes quan hi hagi una lògica que operi els elements individualment.</p> + +<h2 id="Properties" name="Properties">Propietats</h2> + +<dl> + <dt><code>Map.length</code></dt> + <dd>El valor de la propietat <code>length</code> és 1.</dd> + <dt>{{jsxref("Map.prototype")}}</dt> + <dd>Representa el prototipus pel constructor <code>Map</code>. Permet afegir propietats a tots els objectes de tipus <code>Map</code>.</dd> +</dl> + +<h2 id="Boolean_instances" name="Boolean_instances">Instàncies de <code>Map</code></h2> + +<p>Totes les instàncies de <code>Map</code> hereten de {{jsxref("Map.prototype")}}.</p> + +<h3 id="Propietats">Propietats</h3> + +<p>{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Propietats')}}</p> + +<h3 id="Mètodes">Mètodes</h3> + +<p>{{page('ca/Web/JavaScript/Reference/Global_Objects/Map/prototype','Mètodes')}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Exemple_Utilitzar_l'objecte_Map">Exemple: Utilitzar l'objecte <code>Map</code></h3> + +<pre class="brush: js">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 () {} +</pre> + +<h3 id="Exemple_Utilitzar_NaN_com_a_claus_en_un_Map">Exemple: Utilitzar <code>NaN</code> com a claus en un <code>Map</code></h3> + +<p><code>NaN</code> també pot emprar-se com a clau. Tot i que <code>NaN</code> no és igual a si mateix (<code>NaN !== NaN</code> és cert), l'exemple següent funciona perquè els <code>NaN</code>s són indistinguibles entre ells:</p> + +<pre class="brush: js">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" +</pre> + +<h3 id="Exemple_Iterar_Maps_amb_for..of">Exemple: Iterar <code>Maps</code> amb <code>for..of</code></h3> + +<p>Els mapes es poden iterar fent servir un bucle <code>for..of</code> :</p> + +<pre class="brush: js">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" +</pre> + +<h3 id="Exemple_Relació_amb_els_objectes_Array">Exemple: Relació amb els objectes <code>Array</code></h3> + +<pre class="brush: js">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"] +</pre> + +<h2 id="Especificacions">Especificacions</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Especificació</th> + <th scope="col">Estat</th> + <th scope="col">Comentaris</th> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-map-objects', 'Map')}}</td> + <td>{{Spec2('ES6')}}</td> + <td>Definició inicial.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilitat_amb_navegadors">Compatibilitat amb navegadors</h2> + +<p>{{ CompatibilityTable() }}</p> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Característica</th> + <th>Chrome</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Suport bàsic</td> + <td> + <p>{{ CompatChrome(31) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</p> + </td> + <td>{{ CompatGeckoDesktop("13") }}</td> + <td>11</td> + <td>25</td> + <td>7.1</td> + </tr> + <tr> + <td>Argument del constructor: <code>new Map(iterable)</code></td> + <td>{{ CompatChrome(38) }}</td> + <td>{{ CompatGeckoDesktop("13") }}</td> + <td>{{ CompatNo() }}</td> + <td>25</td> + <td>{{ CompatNo() }}</td> + </tr> + <tr> + <td>iterable</td> + <td>{{ CompatChrome(38) }}</td> + <td>{{ CompatGeckoDesktop("17") }}</td> + <td>{{ CompatNo() }}</td> + <td>25</td> + <td>7.1</td> + </tr> + <tr> + <td><code>Map.clear()</code></td> + <td>{{ CompatChrome(31) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoDesktop("19")}}</td> + <td>11</td> + <td>25</td> + <td>7.1</td> + </tr> + <tr> + <td><code>Map.keys(), Map.values(), Map.entries()</code></td> + <td>{{ CompatChrome(37) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoDesktop("20")}}</td> + <td>{{ CompatNo() }}</td> + <td>25</td> + <td>7.1</td> + </tr> + <tr> + <td><code>Map.forEach()</code></td> + <td>{{ CompatChrome(36) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoDesktop("25")}}</td> + <td>11</td> + <td>25</td> + <td>7.1</td> + </tr> + <tr> + <td>Igualtat de claus per a -0 i 0</td> + <td>{{ CompatChrome(34) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoDesktop("29")}}</td> + <td>{{ CompatNo() }}</td> + <td>25</td> + <td>{{ CompatNo() }}</td> + </tr> + <tr> + <td>Argument del constructor: <code>new Map(null)</code></td> + <td>{{ CompatVersionUnknown() }}</td> + <td>{{CompatGeckoDesktop("37")}}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + </tr> + <tr> + <td>Monkey-patched <code>set()</code> al Constructor</td> + <td>{{ CompatVersionUnknown() }}</td> + <td>{{CompatGeckoDesktop("37")}}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Característica</th> + <th>Android</th> + <th>Chrome per Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatChrome(31) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{ CompatGeckoMobile("13") }}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>iOS 8</td> + </tr> + <tr> + <td>Argument del constructor: <code>new Map(iterable)</code></td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatChrome(38) }}</td> + <td>{{ CompatGeckoMobile("13") }}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo }}</td> + </tr> + <tr> + <td>iterable</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatGeckoMobile("17") }}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>iOS 8</td> + </tr> + <tr> + <td><code>Map.clear()</code></td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatChrome(31) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoMobile("19")}}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>iOS 8</td> + </tr> + <tr> + <td><code>Map.keys(), Map.values(), Map.entries()</code></td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatChrome(37) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoMobile("20")}}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>iOS 8</td> + </tr> + <tr> + <td><code>Map.forEach()</code></td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatChrome(36) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoMobile("25")}}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>iOS 8</td> + </tr> + <tr> + <td>Igualtat per a -0 i 0</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatChrome(34) }} <a href="#chrome-specific-note-1">[1]</a><br> + {{ CompatChrome(38) }}</td> + <td>{{CompatGeckoMobile("29")}}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + <td>{{ CompatNo() }}</td> + </tr> + <tr> + <td>Argument del constructor: <code>new Map(null)</code></td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatVersionUnknown() }}</td> + <td>{{CompatGeckoMobile("37")}}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + </tr> + <tr> + <td>Monkey-patched <code>set()</code> al Constructor</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatVersionUnknown() }}</td> + <td>{{CompatGeckoMobile("37")}}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + <td>{{ CompatUnknown() }}</td> + </tr> + </tbody> +</table> +</div> + +<p><a name="chrome-specific-note-1">[1]</a> The feature is available behind a preference. In <code>chrome://flags</code>, activate the entry “Enable Experimental JavaScript”.</p> + +<h2 id="Vegeu_també">Vegeu també</h2> + +<ul> + <li><a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=697479">Bug a Map i Set a Mozilla</a></li> + <li><a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets">Proposta de ECMAScript Harmony</a></li> + <li>{{jsxref("Set")}}</li> + <li>{{jsxref("WeakMap")}}</li> + <li>{{jsxref("WeakSet")}}</li> +</ul> |