A diferença mais substantiva entre o for
loop e o forEach
método é que, com o primeiro, você pode break
sair do loop. Você pode simular continue
simplesmente retornando da função passada para forEach
, mas não há como parar completamente o loop.
Além disso, os dois realizam efetivamente a mesma funcionalidade. Outra pequena diferença envolve o escopo do índice (e todas as variáveis que contêm) no loop for, devido ao içamento de variável.
// 'i' is scoped to the containing function
for (var i = 0; i < arr.length; i++) { ... }
// 'i' is scoped to the internal function
arr.forEach(function (el, i) { ... });
No entanto, acho que forEach
é muito mais expressivo - representa sua intenção de iterar por meio de cada elemento de um array e fornece uma referência ao elemento, não apenas ao índice. No geral, tudo se resume ao gosto pessoal, mas se você puder usar forEach
, eu recomendo.
Existem algumas diferenças mais substanciais entre as duas versões, especificamente em relação ao desempenho. Na verdade, o loop for simples tem um desempenho consideravelmente melhor do que o forEach
método, conforme demonstrado por este teste jsperf .
Se essa performance é ou não necessária para você, cabe a você decidir e, na maioria dos casos, eu preferiria a expressividade à velocidade. Essa diferença de velocidade provavelmente se deve às pequenas diferenças semânticas entre o loop básico e o método ao operar em matrizes esparsas, conforme observado nesta resposta .
Se você não precisa do comportamento forEach
e / ou precisa sair do loop antes, pode usar o Lo-Dash _.each
como alternativa, que também funcionará em vários navegadores. Se você estiver usando jQuery, ele também fornece um similar $.each
, apenas observe as diferenças nos argumentos passados para a função de retorno de chamada em cada variação.
(Quanto ao forEach
polyfill, ele deve funcionar em navegadores mais antigos sem problemas, se você optar por seguir esse caminho.)
break
sairforEach
. Mas uma grande vantagem é criar um novo escopo com a função. Com o polyfill você não deve ter problemas (pelo menos eu não encontrei nenhum).