Quando você não sabe quantas iterações vai precisar
O for brilha quando você já sabe o intervalo de cara — "faça isso 10 vezes", "percorra cada índice desse array". Já o loop while no JavaScript serve pro outro cenário: continuar executando até que algo mude. Você não faz ideia de quantas voltas vão rolar, só conhece a condição que faz tudo parar.
A sintaxe do while em JavaScript é enxuta:
O JavaScript avalia a condição entre parênteses. Se ela for verdadeira (truthy), o bloco executa. Depois ele verifica a condição de novo, e de novo, até que ela se torne falsa (falsy). Esqueça o count++ e a condição nunca muda — seja bem-vindo ao loop infinito.
O modelo mental: verifica, executa, repete
Para um loop while fazer sentido, três coisas precisam ser verdadeiras:
- Algo do qual a condição depende.
- Um jeito de o corpo do loop alterar esse algo.
- Em algum momento, a condição precisa virar falsa.
Esqueça qualquer um desses pontos e você está encrencado. O bug clássico é pular o passo 2:
let count = 0;
while (count < 5) {
console.log(count);
// esqueceu de incrementar count — faz o loop para sempre
}
Isso continua rodando até você matar o processo. Em servidor, o estrago é grande. Por isso, sempre se pergunte: o que no corpo do loop vai tornar a condição falsa?
Um caso real: quando você não sabe onde o loop vai parar
É aqui que o while ganha do for. Você está consumindo itens de algum lugar e só descobre quantos são depois de esvaziar tudo:
shift() remove e retorna o primeiro item da fila. O loop roda enquanto a fila tiver algo dentro e encerra naturalmente quando ela esvazia. Dá pra escrever isso com um for, mas você estaria brigando com o formato do problema — aqui o while expressa a intenção de forma muito mais direta.
do...while em JavaScript: execute primeiro, pergunte depois
O do...while inverte a ordem: executa o corpo antes de checar a condição. Isso garante pelo menos uma iteração:
O corpo sempre executa pelo menos uma vez, mesmo que a condição já seja falsa logo de cara. Compare com o while puro: se a condição for falsa desde o início, o bloco não roda nem uma vez.
O caso clássico: pedir algo ao usuário, validar a resposta e pedir de novo se vier errado. Como você quer perguntar pelo menos uma vez, o do...while cai como uma luva.
Repare no ponto e vírgula depois do ) de fechamento — diferente do while e do for, o do...while exige esse detalhe.
break: saindo do loop na hora
O break encerra o loop mais próximo imediatamente. É assim que você interrompe a execução quando a condição natural não dá conta do recado:
Assim que o break é executado, mais nada dentro do loop roda — nem o restante do corpo, nem uma nova verificação da condição. Você saiu de vez.
while (true) com break em JavaScript
Às vezes a condição de parada fica mais clara dentro do corpo do loop do que no cabeçalho. Nesses casos, inverta a lógica: faça um loop infinito e use break para sair quando terminar.
Duas formas de sair: sucesso ou um limite de segurança. E esse limite importa bastante. Um while (true) sem um break garantido é um loop infinito esperando para acontecer.
continue: pular para a próxima iteração
O continue pula direto para a próxima verificação da condição, ignorando o restante do corpo da iteração atual:
Um detalhe que pega muita gente: se o que faz o loop avançar estiver depois do continue, você acabou de criar um loop infinito. No exemplo acima, o n++ vem antes do continue, então está tudo certo. Coloque depois e o n trava para sempre em um número par.
while ou for no JavaScript: qual escolher
Uma regrinha prática para decidir:
- Contar ou percorrer um intervalo conhecido →
for. Ofor (let i = 0; i < arr.length; i++)deixa inicialização, condição e incremento tudo numa linha só. - Iterar sobre uma coleção →
for...of. Mais limpo do que ficar gerenciando índice na mão. - Repetir até algum estado mudar →
while. Processar uma fila, fazer polling, consumir um stream, tentar de novo até dar certo. - Executar pelo menos uma vez →
do...while.
Na teoria eles são intercambiáveis — dá para reescrever qualquer for como while e vice-versa. Mas escolher o que combina com o formato do problema faz o código se explicar sozinho.
Loop infinito em JavaScript: a regra de ouro
Todo loop while precisa ter uma resposta clara para: o que faz isso parar?
Ou a condição do cabeçalho vai virar false em algum momento, ou existe um break que com certeza vai rodar. Se você não consegue apontar um dos dois, o loop ainda não está pronto.
// Ruim: a condição nunca muda
let ready = false;
while (!ready) {
console.log("aguardando...");
// nada aqui altera `ready`
}
// Bom: o corpo afeta a condição
let ready = false;
let checks = 0;
while (!ready) {
checks++;
if (checks >= 3) ready = true;
}
No navegador, um loop infinito trava a aba inteira. No Node, ele prende um núcleo da CPU até você matar o processo. Vale a pena pegar esses casos antes de subir pra produção.
A seguir: for...of e for...in
O while resolve bem o cenário de "repetir até algo mudar". Já quando a ideia é percorrer arrays, strings e objetos item por item, o JavaScript oferece duas variações pensadas justamente pra isso — for...of e for...in, que vêm na próxima.
Perguntas frequentes
O que é um loop while em JavaScript?
O while repete o bloco de código enquanto a condição for truthy. O JavaScript avalia a condição primeiro, executa o bloco e depois testa de novo. Se a condição já começar falsa, o corpo do loop nem chega a rodar.
Qual a diferença entre while e do...while?
O while testa a condição antes de executar, então é possível ter zero iterações. Já o do...while executa o bloco uma vez e só depois verifica a condição — ou seja, roda pelo menos uma vez. Use do...while quando a primeira iteração precisa acontecer sem condição, tipo pedir uma entrada do usuário.
Como sair de um loop while em JavaScript?
Use break para encerrar o loop na hora, ou continue para pular para a próxima iteração. O break é o que torna o while (true) viável: você deixa o loop rodando para sempre e interrompe quando alguma condição dentro do corpo é satisfeita.