Loops JavaScript explicados: For Loop, While Loop, Do...while Loop e muito mais
- #Programação para Internet
- #Informática Básica
- #JavaScript
Os loops são usados em JavaScript para executar tarefas repetidas com base em uma condição. As condições geralmente retornam true
ou false
. Um loop continuará em execução até que a condição definida retorne false
.
for
Loop
Sintaxe
for (initialization; condition; finalExpression) {
// code
}
O for
loop consiste em três expressões opcionais, seguidas por um bloco de código:
initialization
- Essa expressão é executada antes da execução do primeiro loop e geralmente é usada para criar um contador.condition
- Esta expressão é verificada cada vez antes da execução do loop. Se for avaliado comotrue
, ostatement
código ou no loop será executado. Se for avaliado comofalse
, o loop será interrompido. E se essa expressão for omitida, ela será avaliada automaticamente comotrue
.finalExpression
- Esta expressão é executada após cada iteração do loop. Isso geralmente é usado para incrementar um contador, mas pode ser usado para decrementá-lo.
Qualquer uma dessas três expressões ou o código no bloco de código pode ser omitido.
for
loops são comumente usados para executar o código um determinado número de vezes. Além disso, você pode usar break
para sair do loop mais cedo, antes que a condition
expressão seja avaliada como false
.
Exemplos
1. Iterar por inteiros de 0 a 8:
for (let i = 0; i < 9; i++) {
console.log(i);
}
// Output:
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
2. Use break
para sair de um for
loop antes condition
de false
:
for (let i = 1; i < 10; i += 2) {
if (i === 7) {
break;
}
console.log('Total elephants: ' + i);
}
// Output:
// Total elephants: 1
// Total elephants: 3
// Total elephants: 5
Armadilha Comum: Exceder os Limites de um Array
Ao iterar em uma matriz, é fácil exceder acidentalmente os limites da matriz.
Por exemplo, seu loop pode tentar referenciar o 4º elemento de um array com apenas 3 elementos:
const arr = [ 1, 2, 3 ];
for (let i = 0; i <= arr.length; i++) {
console.log(arr[i]);
}
// Output:
// 1
// 2
// 3
// undefined
Existem duas maneiras de corrigir esse código: defina condition
como i < arr.length
ou i <= arr.length - 1
.
for...in
Loop
Sintaxe
for (property in object) {
// code
}
O for...in
loop itera sobre as propriedades de um objeto. Para cada propriedade, o código no bloco de código é executado.
Exemplos
1. Repita as propriedades de um objeto e registre seu nome e valor no console:
const capitals = {
a: "Athens",
b: "Belgrade",
c: "Cairo"
};
for (let key in capitals) {
console.log(key + ": " + capitals[key]);
}
// Output:
// a: Athens
// b: Belgrade
// c: Cairo
Armadilha comum: comportamento inesperado ao iterar em uma matriz
Embora você possa usar um for...in
loop para iterar em uma matriz, é recomendável usar um loop normal for
ou um for...of
loop.
O for...in
loop pode iterar sobre matrizes e objetos semelhantes a matrizes, mas nem sempre pode acessar os índices de matriz em ordem.
Além disso, o for...in
loop retorna todas as propriedades e propriedades herdadas de uma matriz ou objeto semelhante a uma matriz, o que pode levar a um comportamento inesperado.
Por exemplo, este loop simples funciona como esperado:
const array = [1, 2, 3];
for (const i in array) {
console.log(i);
}
// 0
// 1
// 2
Mas se algo como uma biblioteca JS que você está usando modifica o Array
protótipo diretamente, um for...in
loop irá iterar sobre isso também:
const array = [1, 2, 3];
Array.prototype.someMethod = true;
for (const i in array) {
console.log(i);
}
// 0
// 1
// 2
// someMethod
Embora modificar protótipos somente leitura como Array
ou Object
vá diretamente contra as melhores práticas, pode ser um problema com algumas bibliotecas ou bases de código.
Além disso, como o for...in
é destinado a objetos, é muito mais lento com arrays do que com outros loops.
Resumindo, lembre-se de usar apenas for...in
loops para iterar sobre objetos, não arrays.
for...of
Loop
Sintaxe
for (variable of object) {
// code
}
O for...of
loop itera sobre os valores de muitos tipos de iteráveis, incluindo arrays e tipos de coleção especiais como Set
e Map
. Para cada valor no objeto iterável, o código no bloco de código é executado.
Exemplos
1. Iterar em uma matriz:
const arr = [ "Fred", "Tom", "Bob" ];
for (let i of arr) {
console.log(i);
}
// Output:
// Fred
// Tom
// Bob
2. Iterar sobre um Map
:
const m = new Map();
m.set(1, "black");
m.set(2, "red");
for (let n of m) {
console.log(n);
}
// Output:
// [1, black]
// [2, red]
3. Iterar sobre um Set
:
const s = new Set();
s.add(1);
s.add("red");
for (let n of s) {
console.log(n);
}
// Output:
// 1
// red
while
Loop
Sintaxe
while (condition) {
// statement
}
O while
loop começa avaliando condition
. Se for condition
avaliado como true
, o código no bloco de código será executado. Se for condition
avaliado como false
, o código no bloco de código não será executado e o loop terminará.
Exemplos:
- Enquanto uma variável for menor que 10, registre-a no console e incremente-a em 1:
let i = 1;
while (i < 10) {
console.log(i);
i++;
}
// Output:
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
do...while
Loop
Sintaxe:
do {
// statement
} while (condition);
O do...while
loop está intimamente relacionado ao while
loop. Em um do...while
loop, condition
é verificado no final de cada iteração do loop, em vez de no início antes da execução do loop.
Isso significa que do...while
é garantido que o código em um loop seja executado pelo menos uma vez, mesmo que a condition
expressão já seja avaliada como true
.
Exemplo:
- Enquanto uma variável for menor que 10, registre-a no console e incremente-a em 1:
let i = 1;
do {
console.log(i);
i++;
} while (i < 10);
// Output:
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
2. Empurre para uma matriz, mesmo que condition
avalie true
:
const myArray = [];
let i = 10;
do {
myArray.push(i);
i++;
} while (i < 10);
console.log(myArray);
// Output:
// [10]