[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/for...of [Back]  [Original]

for...of - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

for...of

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since julho de 2015.

O loop for...of percorre objetos iterativos (incluindo Array, Map, Set, o objeto arguments e assim por diante), chamando uma funo personalizada com instrues a serem executadas para o valor de cada objeto distinto.

In this article

Sintaxe

for (variavel of iteravel) {
  declarao
}
varivel

A cada iterao, um valor de uma propriedade diferente atribuido varivel.

iteravel

Objeto cujos atributos sero iterados.

Exemplos

Iterando sobre um Array

js
let iterable = [10, 20, 30];

for (let value of iterable) {
  console.log(value);
}
// 10
// 20
// 30

Ao invs de let, voc pode usar const se voc no for modificar a varivel dentro do bloco.

let iterable = [10, 20, 30];

for (const value of iterable) {
  console.log(value);
}
// 10
// 20
// 30

Iterando sobre uma String

let iterable = "boo";

for (let value of iterable) {
  console.log(value);
}
// "b"
// "o"
// "o"

Iterando sobre uma TypedArray

let iterable = new Uint8Array([0x00, 0xff]);

for (let value of iterable) {
  console.log(value);
}
// 0
// 255

Iterando sobre um Map

let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);

for (let entry of iterable) {
  console.log(entry);
}
// [a, 1]
// [b, 2]
// [c, 3]

for (let [key, value] of iterable) {
  console.log(value);
}
// 1
// 2
// 3

Iterando sobre um Set

let iterable = new Set([1, 1, 2, 2, 3, 3]);

for (let value of iterable) {
  console.log(value);
}
// 1
// 2
// 3

Iterando sobre um objeto arguments

(function() {
  for (let argument of arguments) {
    console.log(argument);
  }
})(1,2,3);

// 1
// 2
// 3

Iterando sobre uma coleo do DOM

Iterar sobre uma coleo do DOM como NodeList: o seguinte exemplo adiciona uma classe read aos pargrafos que so descendentes diretos de uma tag article:

// Nota: Isso ir funcionar somente em plataformas que tem
// suporte ao NodeList.prototype[Symbol.iterator]
let articleParagraphs = document.querySelectorAll("article > p");

for (let paragraph of articleParagraphs) {
  paragraph.classList.add("read");
}

Iterando sobre generators

Voc pode tambm iterar sobre generators:

function* fibonacci() { // uma funo geradora (generator)
  let [prev, curr] = [1, 1];
  while (true) {
    [prev, curr] = [curr, prev + curr];
    yield curr;
  }
}

for (let n of fibonacci()) {
  console.log(n);
  // Trunca a sequncia em 1000
  if (n >= 1000) {
    break;
  }
}

No reuse generators

Generators no devem ser re-usados, mesmo se o loop for...of for terminado precocemente, por exemplo atravs da palavra-chave break. Enquanto em um loop ativo, o generator fechado e tentar iterar novamente sobre ele no produz (yield) nenhum resultado adicional. O Firefox ainda no implementou este comportamento (o generator pode ser reutilizado, violando o padro do ES2015 (13.7.5.13, step 5m), mas isso ir mudar uma vez que o Erro do Firefox 1147371 for resolvido.

var gen = (function *(){
  yield 1;
  yield 2;
  yield 3;
})();
for (let o of gen) {
  console.log(o);
  break;  // Closes iterator
}

// O generator no deve ser reutilizado, o cdigo a seguir no
// faz sentido!
for (let o of gen) {
  console.log(o); // Nunca ser chamado.
}

Iterando sobre outros objetos iterveis

Voc pode tambm iterar sobre um objeto que implementa explicitamente um protocolo itervel protocol:

var iterable = {
  [Symbol.iterator]() {
    return {
      i: 0,
      next() {
        if (this.i < 3) {
          return { value: this.i++, done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};

for (var value of iterable) {
  console.log(value);
}
// 0
// 1
// 2

Diferena entre for...of e for...in

O loop for...in ir iterar sobre todas as propriedades enumerveis de um objeto.

A sintaxe do for...of especfica para colees, ao invs de todos os objetos. Ela ir iterar desta maneira sobre os elementos de qualquer coleo que tiver uma propriedade [Symbol.iterator].

O exemplo a seguir mostra a diferena entre um loop for...of e um loop for...in.

Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};

let iterable = [3, 5, 7];
iterable.foo = "hello";

for (let i in iterable) {
  console.log(i); // escreve 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (let i of iterable) {
  console.log(i); // escreve 3, 5, 7
}

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-for-in-and-for-of-statements

Compatibilidade com navegadores

Consulte tambm


Web Proxy Viewer  |  New URL  |  Original Page