A instrução for cria um ciclo de repetições no programa, cujo encerramento se dá quando uma expressões lógica for avaliada como verdadeira. Essa instrução consiste de três expressões que juntas controlam o número de repetições do ciclo, além de um bloco de código no qual descrevemos o que deve ser executado a cada iteração.

Visão geral

Observe o array abaixo, que contém dados sobre carros.

var carros = [
  { id: 1, modelo: 'Corsa', marca: 'Chevrolet', preco: 45000, createdAt: 1534506085621 },
  { id: 2, modelo: 'Punto', marca: 'Fiat', preco: 120000, createdAt: 1534506085621 }
]

var total = 0

Considere que desejamos calcular a média de preço dos carros. Para isso devemos primeiro obter a soma dos preços de todos os carros.

Usando a sintaxe do for podemos escrever esse código da seguinte forma:

for(var i = 0; i < carros.length; i++) {
    total += carros[i].preco
}

No exemplo acima a instrução var i = 0 será executada no início da repetição e i++ será repetido até que a expressão lógica i

for...of

Podemos reescrever esse mesmo código usando for..of conforme exemplificado abaixo.

for(const carro of carros) {
    total += carro.preco
}

Em muitos casos o uso da variável i, presente no código que utiliza for, não será necessário, exceto para acessar os itens de um array. for..of nos permite alcançar o mesmo resultado acessando diretamente esses itens com um código mais compacto.

E com for..in o array pode ser percorrido de forma semelhante ao for, sem que tenhamos que controlar o seu encerramento.

for(const i in carros) {
    total += carros[i].preco
}

For..in

O laço de repetição for..in permite iterar sobre as propriedades enumeradas de um objeto de acordo com a ordem em que foram inseridos.

Sintaxe

for ([indice] in [objeto])
  declaração

Na prática

Exemplo 1

No exemplo abaixo temos um Array com uma lista de cores e precisamos saber o nome e valor de cada uma das suas propriedades.

const cores = [ 'Verde', 'Amarelo', 'Azul', 'Branco' ]

for (const index in cores) {
  console.log(index, cores[index])
}
// 1 "Verde"
// 2 "Amarelo"
// ...

Exemplo 2

No exemplo a seguir temos um objeto chamado pessoa e precisamos retornar o nome e valor de suas propriedades.

const pessoa = {
  nome: 'Bruno',
  idade: 25
}

for (const index in pessoa) {
  console.log(`$ - ${pessoa[index]}`)
}
// nome - Bruno | idade - 25

Exemplo 3

No exemplo a seguir demonstramos como somar todos os valores de um Array:

const produtos = [
  { descricao: 'Resma Ofício', valor: 11.50, quantidade: 10 },
  { descricao: 'Lapis preto', valor: 0.50, quantidade: 3 },
  { descricao: 'Transferidor plastico', valor: 1.20, quantidade: 4 }
]

let total = 0

for (const index in produtos) {
  const { valor, quantidade } = produtos[index]

  total += valor * quantidade
}

console.log(total) // 121.3

for..of

O laço de repetição for..of permite percorrer um objeto iterativo (Array, Map, Set) e executar um bloco de código.

Sintaxe

for ([item] of [iteravel])
  declaracao

Na prática

Exemplo 1

Neste exemplo vamos percorrer uma lista de números e exibir no console o valor de cada um de seus itens.

const numeros = [ 10, 11, 22, 23, 34, 45, 66, 17, 28, 93, 101 ]

for (const numero of numeros) {
  console.log(numero)
}

Exemplo 2

No exemplo abaixo temos uma lista de carros e precisamos calcular a soma de valor de todos os itens. Podemos solucionar este problema da seguinte forma.

const carros = [
  { id: 1, modelo: 'Corsa', marca: 'Chevrolet', preco: 18000 },
  { id: 2, modelo: 'Punto', marca: 'Fiat', preco: 12000 },
  { id: 3, modelo: 'Gol', marca: 'Volkswagen', preco: 14000 },
  { id: 4, modelo: 'Saveiro', marca: 'Volkswagen', preco: 20000 },
  { id: 5, modelo: 'Uno', marca: 'Fiat', preco: 12000 }
]

let total = 0

for (const carro of carros) {
  total += carro.preco
}

// converte o número para o padrão monetário
const valorFinal = Number(total).toLocaleString('pt-BR', {
  style: 'currency',
  currency: 'BRL'
})

console.log(valorFinal) // R$ 76,000.00

Na linha 9 definimos uma variável com valor zero para armazenar a soma do valor unitário de cada carro.

Entre as linhas 14 e 17 utilizamos o for..of para iterar o Array de carros

Entre as linhas 14 e 17 perceba que ao contrario do for...in nele temos o objeto ao invés de seu índice no Array

Exemplo 3

É possível também utilizar o for...of para percorrer uma lista de elementos do DOM. No exemplo abaixo utilizamos o querySelectorAll para capturar todos os parágrafos de uma página HTML e em seguida utilizamos o for...of para percorrer cada item da lista adicionando a classe lida em cada um dos elementos.

const artigo = document.querySelectorAll('article > p')

for (const paragrafo of artigo) {
  paragrafo.classList.add("read")
}

Compatibilidade

Engine Versão Minima
Node.JS ( V8) 6.4.0
Safari ( WebKit) 11.1
Chrome ( V8) 68
Microsoft Edge ( ChakraCore) 17
Firefox ( Gecko) 61
Nota: O Opera utiliza atualmente grande parte do código do Chrome como base para o seu próprio desenvolvimento e por isso ele não é mencionado nesta listagem.