Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnologia Web para desenvolvedores
  2. JavaScript
  3. Referência JavaScript
  4. Objetos Globais
  5. Array
  6. Array.prototype.forEach()

Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.

View in EnglishAlways switch to English

Array.prototype.forEach()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨julho de 2015⁩.

O métodoforEach() executa uma dada função em cada elemento de um array.

Experimente

const array1 = ["a", "b", "c"];array1.forEach((element) => console.log(element));// Expected output: "a"// Expected output: "b"// Expected output: "c"

Sintaxe

arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);

Parâmetros

callback

Função para executar em cada elemento, recebendo três argumentos:

currentValue

O valor atual do elemento sendo processado no array.

indexOptional

O índice do elemento atual sendo processado no array.

arrayOptional

O array queforEach() está sendo aplicado.

thisArgOptional

Opcional. Valor a ser usado comothis quando executarcallback.

Valor retornado

undefined.

Descrição

OforEach executa ocallback fornecido uma vez para cada elemento da ordem com um valor atribuido. Ele não é invocado para propriedades de índices que foram deletados ou que não foram inicializados (por ex. em arrays esparsos).

callback é invocado comtrês argumentos:

  • ovalor do elemento
  • oíndice do elemento
  • oarray que está sendo percorrido

Se um parâmetrothisArg for passado paraforEach(), ele será passado para ocallback quando invocado como valor parathis. Caso contrário, o valorundefined será passado como valor parathis. O valor dethis assumido nocallback é determinado de acordo com asregras usuais para determinação dothis visto por uma função.

O intervalo dos elementos processados porforEach() é determinado antes da primeira invocação docallback. Elementos que forem adicionados ao array depois da chamada aoforEach() começar não serão visitados pelocallback. Se os valores dos elementos existentes do array forem alterados, o valor passado para ocallback será o valor no momento em que oforEach() visitá-los; elementos que forem deletados antes de serem visitados não serão visitados.

forEach() executa a a funçãocallback uma vez para cada elemento do array – diferentemente demap() oureduce(), ele sempre retorna o valorundefined e não é encadeável. O caso de uso típico é alterar o array no final do loop.

Nota:A única maneira de parar ou interromper um loopforEach() é disparando uma exceção. Se você precisa desse recurso, o métodoforEach() é a ferramenta errada. Você estará mais bem servido com um loop simples nesse caso. Se estiver testando o array de elementos para um predicado e precisar de um valor de retorno Boleano, você pode usarevery() ousome(). Se estiverem disponíveis, os novos métodosfind() efindIndex() também podem ser usados para terminação antecipada em predicados verdadeiros.

Exemplos

Imprimindo os conteúdos de uma ordem

Os códigos a seguir logam uma linha para cada elemento na ordem:

js
function logArrayElements(element, index, array) {  console.log("a[" + index + "] = " + element);}[2, 5, 9].forEach(logArrayElements);// logs:// a[0] = 2// a[1] = 5// a[2] = 9

Função para cópia de um objeto

O código a seguir cria uma cópia para cada objeto dado. Há diferentes formas de criar uma cópia para um objeto. Esta é somente uma forma de explicar comoArray.prototype.forEach funciona. Ela usa um grupo de novas funções ECMAScript 5 Object.*

js
function copy(o) {  var copy = Object.create(Object.getPrototypeOf(o));  var propNames = Object.getOwnPropertyNames(o);  propNames.forEach(function (name) {    var desc = Object.getOwnPropertyDescriptor(o, name);    Object.defineProperty(copy, name, desc);  });  return copy;}var o1 = { a: 1, b: 2 };var o2 = copy(o1); // o2 looks like o1 now

Compatibilidade

forEach é uma adição recente para o ECMA-262 standard; assim sendo, pode não estar presente em outras implementações do standard. Você pode contornar isto pela inserção do código a seguir no começo de seus scripts, permitindo o uso deforEach em implementações que normalmente não possuem este suporte.

js
if (!Array.prototype.forEach) {  Array.prototype.forEach = function (fn, scope) {    for (var i = 0, len = this.length; i < len; ++i) {      fn.call(scope, this[i], i, this);    }  };}

Um algorítimo 100% verdadeiro para a 5ª Edição do ECMA-262, pode ser visto abaixo:

O algoritmo é exatamente o especificado na 5ª Edição da ECMA-262, assumindoObject eTypeError possuem seus valores originais e avaliacallback.call para o valor original deFunction.prototype.call.

js
// Production steps of ECMA-262, Edition 5, 15.4.4.18// Reference: http://es5.github.com/#x15.4.4.18if (!Array.prototype.forEach) {  Array.prototype.forEach = function forEach(callback, thisArg) {    var T, k;    if (this == null) {      throw new TypeError("this is null or not defined");    }    // 1. Let O be the result of calling ToObject passing the |this| value as the argument.    var O = Object(this);    // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".    // 3. Let len be ToUint32(lenValue).    var len = O.length >>> 0; // Hack to convert O.length to a UInt32    // 4. If IsCallable(callback) is false, throw a TypeError exception.    // See: http://es5.github.com/#x9.11    if ({}.toString.call(callback) !== "[object Function]") {      throw new TypeError(callback + " is not a function");    }    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.    if (thisArg) {      T = thisArg;    }    // 6. Let k be 0    k = 0;    // 7. Repeat, while k < len    while (k < len) {      var kValue;      // a. Let Pk be ToString(k).      //   This is implicit for LHS operands of the in operator      // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.      //   This step can be combined with c      // c. If kPresent is true, then      if (Object.prototype.hasOwnProperty.call(O, k)) {        // i. Let kValue be the result of calling the Get internal method of O with argument Pk.        kValue = O[k];        // ii. Call the Call internal method of callback with T as the this value and        // argument list containing kValue, k, and O.        callback.call(T, kValue, k, O);      }      // d. Increase k by 1.      k++;    }    // 8. return undefined  };}

Compatibilidade com navegadores

Especificações

Specification
ECMAScript® 2026 Language Specification
# sec-array.prototype.foreach

Veja também

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp