aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/@@iterator/index.md86
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/@@species/index.md54
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/@@tostringtag/index.md43
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/clear/index.md57
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/delete/index.md57
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/entries/index.md57
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/foreach/index.md108
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/get/index.md61
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/has/index.md58
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/index.md451
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/keys/index.md58
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/map/index.md57
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/set/index.md74
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/size/index.md45
-rw-r--r--files/pt-br/web/javascript/reference/global_objects/map/values/index.md58
15 files changed, 1324 insertions, 0 deletions
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/@@iterator/index.md b/files/pt-br/web/javascript/reference/global_objects/map/@@iterator/index.md
new file mode 100644
index 0000000000..52195c4cd3
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/@@iterator/index.md
@@ -0,0 +1,86 @@
+---
+title: Map.prototype[@@iterator]()
+slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator
+tags:
+ - ECMAScript 2015
+ - Iterator
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.@@iterator
+---
+{{JSRef}}
+
+
+<p class="seoSummary">O valor inicial da propriedade <strong><code>@@iterator</code></strong>
+ é o mesmo objeto função que o valor inicial do método {{jsxref("Map.prototype.entries()", "entries")}}
+</p>
+
+
+{{EmbedInteractiveExample("pages/js/map-prototype-@@iterator.html")}}
+
+## Sintaxe
+
+```js
+myMap[Symbol.iterator]
+```
+
+### Valor retornado
+
+A função iterativa do map, que é a {{jsxref("Map.prototype.entries()", "entries()")}} por padrão
+
+## Exemplos
+
+### Usando o \[@@iterator]\()
+
+```js
+const myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+const mapIter = myMap[Symbol.iterator]()
+
+console.log(mapIter.next().value) // ["0", "foo"]
+console.log(mapIter.next().value) // [1, "bar"]
+console.log(mapIter.next().value) // [Object, "baz"]
+```
+
+### Usando o \[@@iterator]\() com for..of
+
+```js
+const myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+for (const entry of myMap) {
+ console.log(entry)
+}
+// ["0", "foo"]
+// [1, "bar"]
+// [{}, "baz"]
+
+for (const [key, value] of myMap) {
+ console.log(`${key}: ${value}`)
+}
+// 0: foo
+// 1: bar
+// [Object]: baz
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map.prototype.entries()")}}
+- {{jsxref("Map.prototype.keys()")}}
+- {{jsxref("Map.prototype.values()")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/@@species/index.md b/files/pt-br/web/javascript/reference/global_objects/map/@@species/index.md
new file mode 100644
index 0000000000..dcae0f1697
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/@@species/index.md
@@ -0,0 +1,54 @@
+---
+title: get Map[@@species]
+slug: Web/JavaScript/Reference/Global_Objects/Map/@@species
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Property
+browser-compat: javascript.builtins.Map.@@species
+---
+{{JSRef}}
+
+O Acessor de propriedade **`Map[@@species]`** retorna o construtor do `Map`.
+
+## Descrição
+
+O acessor `species` retorna o valor padrão do construtor dos objetos `Map`
+Subclasses de construtores podem sobrescrever isso para mudar o construtor atribuído.
+
+
+## Exemplos
+
+### Species em objetos ordinários
+
+A propriedade *species* retorna a função padrão do construtor, que é o construtor `Map` para objetos `Map`.
+
+```js
+Map[Symbol.species]; // function Map()
+```
+
+### Species em objetos derivados
+
+Em uma objeto derivado (e.g. seu custom map `MyMap`), a `specie` do `MyMap` é o construtor do `MyMap`.
+Porém, você deve querer sobrescrever isso, para retornar o objeto `Map` pai nos métodos derivados de sua classe.
+
+```js
+class MyMap extends Map {
+ // Overwrite MyMap species to the parent Map constructor
+ static get [Symbol.species]() { return Map; }
+}
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
+- {{jsxref("Symbol.species")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/@@tostringtag/index.md b/files/pt-br/web/javascript/reference/global_objects/map/@@tostringtag/index.md
new file mode 100644
index 0000000000..7e65aa299c
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/@@tostringtag/index.md
@@ -0,0 +1,43 @@
+---
+title: Map.prototype[@@toStringTag]
+slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Property
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.@@toStringTag
+---
+{{JSRef}}
+
+A propriedade **`Map[@@toStringTag]`** tem o valor inicial do `Map`.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-@@tostringtag.html","shorter")}}{{js_property_attributes(0,0,1)}}
+
+## Sintaxe
+
+```js
+Map[Symbol.toStringTag]
+```
+
+## Exemplos
+
+### Usando o toStringTag
+
+```js
+Object.prototype.toString.call(new Map()) // "[object Map]"
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Symbol.toStringTag")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/clear/index.md b/files/pt-br/web/javascript/reference/global_objects/map/clear/index.md
new file mode 100644
index 0000000000..273b6a4ce8
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/clear/index.md
@@ -0,0 +1,57 @@
+---
+title: Map.prototype.clear()
+slug: Web/JavaScript/Reference/Global_Objects/Map/clear
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.clear
+---
+{{JSRef}}
+
+O método **`clear()`** remove todos os elementos de um objeto `Map`.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-clear.html")}}
+
+## Sintaxe
+
+```js
+clear()
+```
+
+### Valor retornado
+
+{{jsxref("undefined")}}.
+
+## Exemplos
+
+### Usando o clear()
+
+```js
+var myMap = new Map();
+myMap.set('bar', 'baz');
+myMap.set(1, 'foo');
+
+myMap.size; // 2
+myMap.has('bar'); // true
+
+myMap.clear();
+
+myMap.size; // 0
+myMap.has('bar') // false
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/delete/index.md b/files/pt-br/web/javascript/reference/global_objects/map/delete/index.md
new file mode 100644
index 0000000000..355cd1d4dd
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/delete/index.md
@@ -0,0 +1,57 @@
+---
+title: Map.prototype.delete()
+slug: Web/JavaScript/Reference/Global_Objects/Map/delete
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.delete
+---
+{{JSRef}}
+
+O método **`delete()`** remove o elemento específico do objeto `Map` através de sua chave.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-delete.html")}}
+
+## Sintaxe
+
+```js
+delete(key)
+```
+
+### Parâmetros
+
+- `key`
+ - : A chave do elemento que será removido do objeto `Map`.
+
+### Valor retornado
+
+`true` se o elemento do `Map` existia e foi removido, ou
+`false` se o elemento não existe.
+
+## Exemplos
+
+### Usando o delete()
+
+```js
+var myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.delete('bar'); // Retorna true. Removido com sucesso.
+myMap.has('bar'); // Retorna false. O elemento "bar" não está mais presente
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/entries/index.md b/files/pt-br/web/javascript/reference/global_objects/map/entries/index.md
new file mode 100644
index 0000000000..f638f1973f
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/entries/index.md
@@ -0,0 +1,57 @@
+---
+title: Map.prototype.entries()
+slug: Web/JavaScript/Reference/Global_Objects/Map/entries
+tags:
+ - ECMAScript 2015
+ - Iterator
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+browser-compat: javascript.builtins.Map.entries
+---
+{{JSRef}}
+
+O método **`entries()`** retorna um novo objeto **[iterador](/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)** que contém os pares `[key, value]` de cada elemento no objeto `Map` na ordem em que foram inseridos. Nesse caso em particular, esse objeto iterador também é iterativo. então o loop for-of pode ser usado. Quando o protocolo `[Symbol.iterator]` é usado, ele retorna uma função que, quando invocada, retorna o própio iterador.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-entries.html")}}
+
+## Sintaxe
+
+```js
+entries()
+```
+
+### Valor retornado
+
+Um novo objeto iterador {{jsxref("Map")}}.
+
+## Exemplos
+
+### Usando o entries()]
+
+```js
+let myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz)
+
+let mapIter = myMap.entries()
+
+console.log(mapIter.next().value) // ["0", "foo"]
+console.log(mapIter.next().value) // [1, "bar"]
+console.log(mapIter.next().value) // [Object, "baz"]
+```
+
+## Especificação
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{compat}}
+
+## Veja também
+
+- {{jsxref("Map.prototype.keys()")}}
+- {{jsxref("Map.prototype.values()")}} \ No newline at end of file
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/foreach/index.md b/files/pt-br/web/javascript/reference/global_objects/map/foreach/index.md
new file mode 100644
index 0000000000..8cc2df5357
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/foreach/index.md
@@ -0,0 +1,108 @@
+---
+title: Map.prototype.forEach()
+slug: Web/JavaScript/Reference/Global_Objects/Map/forEach
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.forEach
+---
+{{JSRef}}
+
+O método **`forEach()`** executa a função que foi provida uma vez para cada par de chave-valor no objeto `Map`, na order em que foram inseridos.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}
+
+## Sintaxe
+
+```js
+// Arrow function
+forEach(() => { ... } )
+forEach((value) => { ... } )
+forEach((value, key) => { ... } )
+forEach((value, key, map) => { ... } )
+
+// função de Callback
+forEach(callbackFn)
+forEach(callbackFn, thisArg)
+
+// função de callback inline
+forEach(function callbackFn() { ... })
+forEach(function callbackFn(value) { ... })
+forEach(function callbackFn(value, key) { ... })
+forEach(function callbackFn(value, key, map) { ... })
+forEach(function callbackFn(value, key, map) { ... }, thisArg)
+```
+
+### Parâmetros
+
+- `callbackFn`
+ - : A função que será executada em cada entrada do map. Ela receberá os seguintes argumentos:
+ - `value` {{Optional_Inline}}
+ - : O valor de cada iteração.
+ - `key` {{Optional_Inline}}
+ - : A chave de cada iteração.
+ - `map` {{Optional_Inline}}
+ - : O map que está sendo iterado.
+- `thisArg` {{Optional_Inline}}
+ - : O valor para usar como `this` quando o callback for executado.
+
+### Valor retornado
+
+{{jsxref("undefined")}}.
+
+## Descrição
+
+O método `forEach` executa o `callback` fornecido uma vez para cada chave do map
+que realmente existe.
+Ele não é invocado para chaves que foram deletadas.
+Porém, é executado para valores que estão presentes mesmo tendo o valor `undefined`.
+
+O `callback` é invocado com **três argumentos**:
+
+- O `value` de entrada
+- A `key` de entrada
+- o **objeto `Map`** que está sendo percorrido
+
+Se o parâmetro `thisArg` for fornecido para o `forEach`, ele será passado para o
+`callback` quando for invocado, para ser usado como o valor de `this`. De outra forma,
+o valor `undefined` será usado como valor de `this`. O valor de `this` será
+observado pelo `callback` em última análise e será determinado de acordo com
+[as regras usuais para a determinação do `this` visto por uma função](/pt-BR/docs/Web/JavaScript/Reference/Operators/this).
+
+Cada valor será visitado uma vez, exceto no caso em que foram deletados e adicionados novamente
+antes do `forEach` ser finalizado. O `callback` não é invocado para valores que foram removidos antes de
+terem sidos visitados. Novos valores adicionados antes do `forEach` terminar serão visitados.
+
+## Exemplos
+
+### Exibindo o conteúdo de um objeto Map
+
+O código a seguir imprime uma linha para cada elemento do objeto `Map`:
+
+```js
+function logMapElements(value, key, map) {
+ console.log(`map.get('${key}') = ${value}`)
+}
+new Map([['foo', 3], ['bar', {}], ['baz', undefined]]).forEach(logMapElements)
+// logs:
+// "map.get('foo') = 3"
+// "map.get('bar') = [object Object]"
+// "map.get('baz') = undefined"
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Array.prototype.forEach()")}}
+- {{jsxref("Set.prototype.forEach()")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/get/index.md b/files/pt-br/web/javascript/reference/global_objects/map/get/index.md
new file mode 100644
index 0000000000..caebad9289
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/get/index.md
@@ -0,0 +1,61 @@
+---
+title: Map.prototype.get()
+slug: Web/JavaScript/Reference/Global_Objects/Map/get
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.get
+---
+{{JSRef}}
+
+O método **`get()`** retorna um elemento específico do objeto `Map`. Se o valor
+associado à chave for um objeto, será retornado a referência do objeto e qualquer mudança no mesmo
+irá afetar o valor que está dentro do objeto `Map`.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-get.html")}}
+
+## Sintaxe
+
+```js
+get(key)
+```
+
+### Parâmetros
+
+- `key`
+ - : A chave do elemento que será retornado do objeto `Map`.
+
+### Valor retornado
+
+O elemento associado à chave especificada, ou {{jsxref("undefined")}} se
+a chave não puder ser encontrada no objeto `Map`.
+
+## Exemplos
+
+### Usando o get()
+
+```js
+let myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.get('bar'); // Returns "foo"
+myMap.get('baz'); // Returns undefined
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
+- {{jsxref("Map.prototype.set()")}}
+- {{jsxref("Map.prototype.has()")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/has/index.md b/files/pt-br/web/javascript/reference/global_objects/map/has/index.md
new file mode 100644
index 0000000000..f3b072f35e
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/has/index.md
@@ -0,0 +1,58 @@
+---
+title: Map.prototype.has()
+slug: Web/JavaScript/Reference/Global_Objects/Map/has
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.has
+---
+{{JSRef}}
+
+O método **`has()`** retorna um booleano indicando se o elemento com a chave especificada existe ou não.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-has.html")}}
+
+## Sintaxe
+
+```js
+has(key)
+```
+
+### Parâmetros
+
+- `key`
+ - : A chave do elemento que será testado no objeto `Map`.
+
+### Valor retornado
+
+`true` se o elemento com a chave especificada existe no objeto `Map`, de outra forma será retornado `false`.
+
+## Exemplos
+
+### Usando has()
+
+```js
+let myMap = new Map()
+myMap.set('bar', "foo")
+
+myMap.has('bar') // retorna true
+myMap.has('baz') // retorna false
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores.
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
+- {{jsxref("Map.prototype.set()")}}
+- {{jsxref("Map.prototype.get()")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/index.md b/files/pt-br/web/javascript/reference/global_objects/map/index.md
new file mode 100644
index 0000000000..2564a38409
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/index.md
@@ -0,0 +1,451 @@
+---
+title: Map
+slug: Web/JavaScript/Reference/Global_Objects/Map
+tags:
+ - Class
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Reference
+ - Polyfill
+browser-compat: javascript.builtins.Map
+---
+{{JSRef}}
+
+O objeto **`Map`** contém pares de chave-valor e lembra a ordem original da inserção das chaves. Qualquer valor (objetos e {{glossary("Primitive", "valores primitivos")}}) podem ser usados como chave ou valor.
+
+{{EmbedInteractiveExample("pages/js/map.html", "taller")}}
+
+## Descrição
+
+Um objeto `Map` itera seus elementos na order da inserção - um loop {{jsxref("Statements/for...of", "for...of")}} retorna um array de `[key, value]` para cada iteração
+
+### Igualdade de chaves
+
+- A igualdade de chaves é baseada no algoritimo [`sameValueZero`](/pt-BR/docs/Web/JavaScript/Equality_comparisons_and_sameness#same-value-zero_equality).
+
+- O {{jsxref("NaN")}} é considerado o mesmo que o `NaN` (apesar de `NaN !== NaN`) e todos os outros valores são considerados de acordo com a semântica do operador `===`.
+
+- Na especificação atual do ECMAScript, `-0` e `+0` são considerados iguais, embora não tenha sido nos esboços anteriores. Veja _"Equivalência de valor entre -0 e 0"_ em [Compatibilidade com navegadores](#browser_compatibility) para mais detalhes;
+
+### Objetos vs. Maps
+
+Um {{jsxref("Object")}} é similar o `Map` - ambos permitem que valores sejam definidos a chaves, retornar esses valores, remover as chaves, e detectar se algo está armazenado na chave. Por esta razão (e porque não existem outras alternativas construídas), o `Objeto` tem sido usado como `Map` historicamente.
+
+Porém, existem diferenças importantes que fazem o `Map` ser preferido em alguns casos:
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="row"></th>
+ <th scope="col">Map</th>
+ <th scope="col">Objeto</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">Chaves acidentais</th>
+ <td>
+ O <code>Map</code> não contém nenhuma chave por padrão. Ele só contém o que é definido explicitamente nele.
+ </td>
+ <td>
+ <p>
+ Um <code>Objeto</code> tem um prototype, então ele contém por padrão algumas chaves que podem conflitar com suas próprias chaves se você não for cuidadoso.
+ </p>
+ <div class="notecard note">
+ <p>
+ <strong>Note:</strong> Apartir do ES5, isso pode ser ignorado com o {{jsxref("Object.create", "Object.create(null)")}}, mas isso raramente é feito.
+ </p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Tipos das chaves</th>
+ <td>
+ As chaves do <code>Map</code> podem ser qualquer valor (incluindo funções, objetos, ou qualquer outro tipo primitivo).
+ </td>
+ <td>
+ A chave de um <code>Objeto</code> deve ser uma {{jsxref("String")}} ou um {{jsxref("Symbol")}}.
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Ordem das chaves</th>
+ <td>
+ <p>
+ As chaves dentro do <code>Map</code> são ordenadas de forma simples, de maneira direta: O objeto <code>Map</code> itera suas entradas, chaves, e valor na ordem em que foram inseridas.
+ </p>
+ </td>
+ <td>
+ <p>
+ Embora as chaves de um <code>Objeto</code> comum hoje sejam ordenadas, nem sempre esse foi o caso, e a ordem é complexa. Como resultado é melhor não confiar na ordem das propriedades.
+ </p>
+ <p>
+ A ordem foi definida primeiramente para suas próprias propriedades apenas no ECMAScript 2015; no ECMAScript 2020 a ordem definida é por propriedades herdadas também.
+ Veja o
+ <a href="https://tc39.es/ecma262/#sec-ordinaryownpropertykeys"
+ >OrdinaryOwnPropertyKeys</a
+ >
+ e
+ <a href="https://tc39.es/ecma262/#sec-enumerate-object-properties">
+ numerateObjectProperties
+ </a>
+ operações de especificações abstraídas. Mas note que nenhum mecanismo itera <strong>todas</strong> as propriedades do objeto; cada um dos vários mecanismos incluem diferentes subconjuntos de propriedades.
+ ({{jsxref("Statements/for...in",
+ "for-in")}}
+ incluí apenas propriedades enumeráveis com chaves do tipo string
+ {{jsxref("Object.keys")}} inclui apenas chaves próprias e enumeráveis do tipo string;
+ {{jsxref("Object.getOwnPropertyNames")}} incluí o próprio, e propriedades com chaves do tipo string, mesmo que não enumeráveis
+ {{jsxref("Object.getOwnPropertySymbols")}} faz o mesmo só que para
+ propriedades <code>Símbolos</code> como chave, etc.)
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><p>Tamanho</p></th>
+ <td>
+ O número de items dentro de um <code>Map</code>
+ é facilmente retornado pela propriedade {{jsxref("Map.prototype.size", "size")}}
+ </td>
+ <td>
+ O número de items dentro de um <code>Objeto</code> deve ser determinado manualmente
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Iteração</th>
+ <td>
+ Um <code>Map</code> é {{jsxref("Iteration_protocols", "iterável")}}, então ele pode ser diretamente iterável
+ </td>
+ <td>
+ <p>
+ O <code>Objeto</code> não implementa o <a
+ href="/pt-BR/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol"
+ >protocolo de iteração</a>, e os objetos não podem ser iterados diretamente usando o <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/for...of"
+ >for...of</a
+ > (por padrão).
+ </>
+ <div class="notecard note">
+ <p><strong>Nota:</strong></p>
+ <ul>
+ <li>
+ Um objeto pode implementar o protocolo de iteração, ou pode ser iterado usando o <a
+ href="/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/keys"
+ ><code>Object.keys</code></a
+ >ou<a
+ href="/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/entries"
+ ><code>Object.entries</code></a
+ >.
+ </li>
+ <li>
+ A declaração <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/for...in"
+ >for...in</a>
+ permite que você itere pela propriedades enumeráveis de um objeto.
+ </li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Performance</th>
+ <td>
+ <p>
+ Perfoma melhor em cenários envolvendo adições e remoções frequentes em pares chave-valor.
+ </p>
+ </td>
+ <td>
+ <p>
+ Não é otimizado para adições e remoções frequentes de pares chave-valor.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Serialização e análise sintática</th>
+ <td>
+ <p>Não há suporte nativo para a serialização ou análise sintática.</p>
+ <p>
+ (Mas você pode construir sua própria serialização e conversão para o <code>Map</code> usando o
+ {{jsxref("JSON.stringify()")}} como o argumento <em>replacer</em>,
+ e usando o {{jsxref("JSON.parse()")}} com o argumento <em>reviver</em>.
+ Veja a questão no Stack Overflow <a href="https://stackoverflow.com/q/29085197/"
+ >How do you JSON.stringify an ES6 Map?</a
+ >).
+ </p>
+ </td>
+ <td>
+ <p>
+ Suporte nativo para serialização de {{jsxref("Object", "Objeto")}} para JSON, usando {{jsxref("JSON.stringify()")}}.
+ </p>
+ <p>
+ Suporte nativo para conversão de JSON para {{jsxref("Object", "Objeto")}} usando {{jsxref("JSON.parse()")}}.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+### Definindo propriedades no objeto
+
+Definir propriedades no objeto também funciona em objetos `Map`, e pode causar um confusão considerável.
+
+Portanto, isso aparenta funcionar de certa forma:
+
+```js example-bad
+const wrongMap = new Map()
+wrongMap['bla'] = 'blaa'
+wrongMap['bla2'] = 'blaaa2'
+
+console.log(wrongMap) // Map { bla: 'blaa', bla2: 'blaaa2' }
+```
+
+Mas esse jeito de definir propriedades não interage com a estrura de dados do `Map`. Dessa forma é usada a implementação genérica do objeto. O valor 'bla' não é armazenado no `Map` para queries. Outras operaçãoes nos dados irão falhar.
+
+```js example-bad
+wrongMap.has('bla') // false
+wrongMap.delete('bla') // false
+console.log(wrongMap) // Map { bla: 'blaa', bla2: 'blaaa2' }
+```
+
+A maneira correta para armazenar dados dentro do `Map` é através do `set(key,value)`
+
+```js example-good
+const contacts = new Map()
+contacts.set('Jessie', {phone: "213-555-1234", address: "123 N 1st Ave"})
+contacts.has('Jessie') // true
+contacts.get('Hilary') // undefined
+contacts.set('Hilary', {phone: "617-555-4321", address: "321 S 2nd St"})
+contacts.get('Jessie') // {phone: "213-555-1234", address: "123 N 1st Ave"}
+contacts.delete('Raymond') // false
+contacts.delete('Jessie') // true
+console.log(contacts.size) // 1
+```
+
+## Construtor
+
+- {{jsxref("Map/Map", "Map()")}}
+ - : Cria um novo objeto `Map`.
+
+## propriedades estáticas
+
+- {{jsxref("Map.@@species", "get Map[@@species]")}}
+ - : A função do construtor que é usada para criar apartir de objetos.
+
+## propriedades da instância
+
+- {{jsxref("Map.prototype.size")}}
+ - : Retorna o número de pares chave/valor no objeto `Map`.
+
+## Métodos da instância
+
+- {{jsxref("Map.prototype.clear()")}}
+ - : Remove todos os pares chave/valor do objeto `Map`.
+- {{jsxref("Map.delete", "Map.prototype.delete(<var>key</var>)")}}
+ - : Retorna `true` se o elemento no objeto `Map` existia e tenha sido removido, ou `false`
+ se o elemento não existia. `Map.prototype.has(key)` irá retornar `false` após isso.
+- {{jsxref("Map.get", "Map.prototype.get(<var>key</var>)")}}
+ - : Retorna o valor associado à chave, ou `undefined` se não há nada.
+- {{jsxref("Map.has", "Map.prototype.has(<var>key</var>)")}}
+ - : Retorna uma asserção booleana se o valor tenha sido associado à chave no objeto `Map` ou não.
+- {{jsxref("Map.set", "Map.prototype.set(<var>key</var>, <var>value</var>)")}}
+ - : Define o `valor` para a `chave` no objeto `Map`. Retorna o objeto `Map`
+
+### Métodos iterativos
+
+- {{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}
+ - : Retorna um novo objeto iterador que contèm **um array de `[chave, valor]`** para cada elemento do objeto `Map` na ordem em que foram inseridos.
+- {{jsxref("Map.prototype.keys()")}}
+ - : Retorna um novo objeto iterador que contèm as **chaves** de cada elemento do objeto `Map` na ordem em que foram inseridos.
+- {{jsxref("Map.prototype.values()")}}
+ - : Retorna um novo objeto iterador que contém os **valores** para cada elemento do objeto `Map` na ordem em que foram inseridos.
+- {{jsxref("Map.prototype.entries()")}}
+ - : Retorna um novo objeto iterador que contèm **um array de `[chave, valor]`**
+ para cada elemento no objeto `Map` na ordem em que foram inseridos.
+- {{jsxref("Map.forEach", "Map.prototype.forEach(<var>callbackFn</var>[,
+ <var>thisArg</var>])")}}
+ - : Invoca o `callbackFn` uma vez para cada par chave-valor presente no objeto `Map`, na ordem em que foram inseridos. Se um parâmetro `thisArg` é provido para o `forEach`, será usado o valor de `this` para cada callback.
+
+## Exemplos
+
+### Usando o objeto Map
+
+```js
+const myMap = new Map()
+
+const keyString = 'a string'
+const keyObj = {}
+const keyFunc = function() {}
+
+// setting the values
+myMap.set(keyString, "value associated with 'a string'")
+myMap.set(keyObj, 'value associated with keyObj')
+myMap.set(keyFunc, 'value associated with keyFunc')
+
+myMap.size // 3
+
+// getting the values
+myMap.get(keyString) // "valor associado a 'a string'"
+myMap.get(keyObj) // "valor associado a keyObj"
+myMap.get(keyFunc) // "valor associado a keyFunc"
+
+myMap.get('a string') // "valor associado a 'a string'"
+ // porque keyString === 'a string'
+myMap.get({}) // undefined, porque keyObj !== {}
+myMap.get(function() {}) // undefined, porque keyFunc !== function () {}
+```
+
+### Usando NaN como chaves de Map
+
+{{jsxref("NaN")}} também pode ser usado como chave. Apesar de todo o `NaN` não ser igual a ele mesmo (`NaN !== NaN`), o exemplo a seguir funciona porque não é possível distinguir um `NaN` de outros.
+
+```js
+const myMap = new Map()
+myMap.set(NaN, 'not a number')
+
+myMap.get(NaN)
+// "not a number"
+
+const otherNaN = Number('foo')
+myMap.get(otherNaN)
+// "not a number"
+```
+
+### Iterando o Map com for..of
+
+`Maps` podem ser iterados usando um loop `for..of`:
+
+```js
+const myMap = new Map()
+myMap.set(0, 'zero')
+myMap.set(1, 'one')
+
+for (const [key, value] of myMap) {
+ console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = um
+
+for (const key of myMap.keys()) {
+ console.log(key)
+}
+// 0
+// 1
+
+for (const value of myMap.values()) {
+ console.log(value)
+}
+// zero
+// one
+
+for (const [key, value] of myMap.entries()) {
+ console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+```
+
+### Iterando o Map com forEach()
+
+`Maps` podem ser iterados usando o
+método {{jsxref("Map.prototype.forEach", "forEach()")}}:
+
+```js
+myMap.forEach(function(value, key) {
+ console.log(key + ' = ' + value)
+})
+// 0 = zero
+// 1 = um
+```
+### Relação com Arrays
+
+```js
+const kvArray = [['key1', 'value1'], ['key2', 'value2']]
+
+// Use o construtor padrão do Map para transformar um array 2D chave-valor em um map
+const myMap = new Map(kvArray)
+
+myMap.get('key1') // retorna "value1"
+
+// Use o Array.from() para transformar um map em um Array bidimensional de chaves e valores
+console.log(Array.from(myMap)) // Irá exibir para você o mesmo Array como um Array chave-valor
+
+// Uma forma sucinta de fazer o mesmo, utilizando a sintaxe spread
+console.log([...myMap])
+
+// Ou use os iteradores keys() ou values(), e os converta para um array
+console.log(Array.from(myMap.keys())) // ["key1", "key2"]
+```
+
+### Clonando e mesclando Maps
+
+Assim como `Arrays`, o map também pode ser clonado:
+
+```js
+const original = new Map([
+ [1, 'um']
+])
+
+const clone = new Map(original)
+
+console.log(clone.get(1)) // um
+console.log(original === clone) // false (Útil para comparações superficiais)
+```
+
+> **Nota:** Tenha em mente que _o dado em si_ não é clonado.
+
+Maps podem ser mesclados, mantendo as chaves únicas:
+
+```js
+const first = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+])
+
+const second = new Map([
+ [1, 'uno'],
+ [2, 'dos']
+])
+
+// Mescla dois maps. A última chave a se repetir vence.
+// O operador spread essenciamente converte um Map para um Array
+const merged = new Map([...first, ...second])
+
+console.log(merged.get(1)) // uno
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three
+```
+Maps podem ser mesclados com array também:
+
+```js
+const first = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+])
+
+const second = new Map([
+ [1, 'uno'],
+ [2, 'dos']
+])
+
+// Mescla maps com um array. A última chave a se repetir vence.
+const merged = new Map([...first, ...second, [1, 'eins']])
+
+console.log(merged.get(1)) // eins
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- Um polyfill do `Map` está disponível em
+ [`core-js`](https://github.com/zloirock/core-js#map)
+- {{jsxref("Set")}}
+- {{jsxref("WeakMap")}}
+- {{jsxref("WeakSet")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/keys/index.md b/files/pt-br/web/javascript/reference/global_objects/map/keys/index.md
new file mode 100644
index 0000000000..b183c6c3c4
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/keys/index.md
@@ -0,0 +1,58 @@
+---
+title: Map.prototype.keys()
+slug: Web/JavaScript/Reference/Global_Objects/Map/keys
+tags:
+ - ECMAScript 2015
+ - Iterator
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+browser-compat: javascript.builtins.Map.keys
+---
+{{JSRef}}
+
+O método **`keys()`** retorna um novo objeto **[iterador](/pt-BR/docs/Web/JavaScript/Guide/Iterators_and_Generators)** que contém
+as chaves de cada elemento dentro do objeto `Map` na ordem em que foram inseridos.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-keys.html")}}
+
+## Sintaxe
+
+```js
+keys()
+```
+
+### Valor retornado
+
+Um novo objeto {{jsxref("Map")}} iterador.
+
+## Exemplos
+
+### Usando keys()
+
+```js
+var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.keys();
+
+console.log(mapIter.next().value); // "0"
+console.log(mapIter.next().value); // 1
+console.log(mapIter.next().value); // Object
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map.prototype.entries()")}}
+- {{jsxref("Map.prototype.values()")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/map/index.md b/files/pt-br/web/javascript/reference/global_objects/map/map/index.md
new file mode 100644
index 0000000000..6ce3193931
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/map/index.md
@@ -0,0 +1,57 @@
+---
+title: Map() constructor
+slug: Web/JavaScript/Reference/Global_Objects/Map/Map
+tags:
+ - Constructor
+ - JavaScript
+ - Map
+ - Reference
+ - Polyfill
+browser-compat: javascript.builtins.Map.Map
+---
+{{JSRef}}
+
+O **construtor `Map()`** cria objetos {{jsxref("Map")}}.
+
+## Sintaxe
+
+```js
+new Map()
+new Map(iterable)
+```
+
+### Parâmetros
+
+- `iterable` {{optional_inline}}
+ - : Um {{jsxref("Array")}} ou outro
+ objeto [iterável](/pt-BR/docs/Web/JavaScript/Reference/Iteration_protocols)
+ dos quais os elementos são pares chave-valor. (Por exemplo, arrays com dois elementos como `[[ 1, 'one' ],[ 2, 'two' ]]`.).
+ Cada par chave-valor é adicionado ao novo `Map`.
+
+## Exemplos
+
+### Criando um novo Map
+
+```js
+let myMap = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+])
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- Um polyfill de `Map` esta disponível em
+ [`core-js`](https://github.com/zloirock/core-js#map)
+- {{jsxref("Set")}}
+- {{jsxref("WeakMap")}}
+- {{jsxref("WeakSet")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/set/index.md b/files/pt-br/web/javascript/reference/global_objects/map/set/index.md
new file mode 100644
index 0000000000..b152f42f4d
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/set/index.md
@@ -0,0 +1,74 @@
+---
+title: Map.prototype.set()
+slug: Web/JavaScript/Reference/Global_Objects/Map/set
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+ - Reference
+browser-compat: javascript.builtins.Map.set
+---
+{{JSRef}}
+
+O método **`set()`** adiciona ou atualiza um elemento com a chave especificada e um valor do objeto `Map`.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-set.html")}}
+
+## Sintaxe
+
+```js
+set(key, value)
+```
+
+### Parâmetros
+
+- `key`
+ - : A chave do elemento que será adicionado ao objeto `Map`.
+- `value`
+ - : O valor do elemento que será adicionado ao objeto `Map`.
+
+### Valor retornado
+
+O objeto `Map`.
+
+## Exemplos
+
+### Usando o set()
+
+```js
+let myMap = new Map()
+
+// Adiciona um elemento ao map
+myMap.set('bar', 'foo')
+myMap.set(1, 'foobar')
+
+// Atualiza um elemento no map
+myMap.set('bar', 'baz')
+```
+
+### Usando o `set` de forma encadeada
+
+Já que o método `set()` retorna o mesmo objeto `Map`, você pode encadear a chamada do método como abaixo:
+
+```js
+// Adiciona novos elementos ao map de forma encadeada.
+myMap.set('bar', 'foo')
+ .set(1, 'foobar')
+ .set(2, 'baz');
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
+- {{jsxref("Map.prototype.get()")}}
+- {{jsxref("Map.prototype.has()")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/size/index.md b/files/pt-br/web/javascript/reference/global_objects/map/size/index.md
new file mode 100644
index 0000000000..db921570b7
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/size/index.md
@@ -0,0 +1,45 @@
+---
+title: Map.prototype.size
+slug: Web/JavaScript/Reference/Global_Objects/Map/size
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Property
+browser-compat: javascript.builtins.Map.size
+---
+{{JSRef}}
+
+A propriedade acessora **`size`** retorna o número de elementos que estão dentro do objeto {{jsxref("Map")}}
+
+{{EmbedInteractiveExample("pages/js/map-prototype-size.html")}}
+
+## Descrição
+
+O valor de `size` é um inteiro que representa a quantidade de entradas que o objeto `Map` possui.
+A função acessora set para `size` é `undefined`; você não poderá alterar essa propriedade.
+
+## Exemplos
+
+### Usando o size
+
+```js
+var myMap = new Map();
+myMap.set('a', 'alpha');
+myMap.set('b', 'beta');
+myMap.set('g', 'gamma');
+
+myMap.size // 3
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com browsers
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map")}}
diff --git a/files/pt-br/web/javascript/reference/global_objects/map/values/index.md b/files/pt-br/web/javascript/reference/global_objects/map/values/index.md
new file mode 100644
index 0000000000..3d2e536c3c
--- /dev/null
+++ b/files/pt-br/web/javascript/reference/global_objects/map/values/index.md
@@ -0,0 +1,58 @@
+---
+title: Map.prototype.values()
+slug: Web/JavaScript/Reference/Global_Objects/Map/values
+tags:
+ - ECMAScript 2015
+ - Iterator
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+browser-compat: javascript.builtins.Map.values
+---
+{{JSRef}}
+
+O método **`values()`** retorna um novo objeto **[iterador](/pt-BR/docs/Web/JavaScript/Guide/Iterators_and_Generators)** que contém o valor
+de cada elemento dentro do objeto `Map` na ordem em que foram inseridos.
+
+{{EmbedInteractiveExample("pages/js/map-prototype-values.html")}}
+
+## Sintaxe
+
+```js
+values()
+```
+
+### Valor retornado
+
+Um novo objeto {{jsxref("Map")}} iterador.
+
+## Exemplos
+
+### Usando values()
+
+```js
+var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.values();
+
+console.log(mapIter.next().value); // "foo"
+console.log(mapIter.next().value); // "bar"
+console.log(mapIter.next().value); // "baz"
+```
+
+## Especificações
+
+{{Specifications}}
+
+## Compatibilidade com navegadores
+
+{{Compat}}
+
+## Veja também
+
+- {{jsxref("Map.prototype.entries()")}}
+- {{jsxref("Map.prototype.keys()")}}