De fato há uma diferença, não compreendi bem, mas há. Utilizando o for, mesmo usando o break, não consegui obter o resultado desejado. Com o while, pelo menos à primeira vista, ficou tudo ok. Segue o código para quem quiser testar. Porém repito, passei uma tarde modificando a ordem, if dentro de if etc., e não obtive sucesso com o for. Pelo menos nessa ocasião.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Testes Javacript</title>
</head>
<body>
<h1>Destinos de Viagens válidos</h1>
<p>Caruaru</p>
<p>Recife</p>
<p>Olinda</p>
<p>Petrolina</p>
<p>João Pessoa</p>
<p>Campina Grande</p>
<p>Resultado no console: Tecle F12 ---></p>
<div id="container"></div>
<script src="loops.js"></script>
</body>
</html>
loops.js abaixo
const destinosViagem = new Array (
`Caruaru`,
`Recife`,
`Olinda`,
`Petrolina`,
`João Pessoa`,
`Campina Grande`
);
console.log(destinosViagem);
let localizacao = prompt(`Qual o seu destino?`);
let idadeComprador = prompt(`Qual a sua idade?`);
let i = 0;
while (i < destinosViagem.length) {
if (destinosViagem[i] === localizacao && idadeComprador <18) {
console.log(`Proibido a compra por menores de 18 anos.`);
let acompanhado = prompt(`Você está acompanhado de um responsável, sim ou não?`);
if (acompanhado === `sim`) {
// console.clear();
console.log(`Achei meu destino, siga para`, destinosViagem[i]);
break;
}
if (acompanhado === `não`) {
console.clear();
console.log(`Menores só viajam com um responsável!`);
break;
}
}
else if (destinosViagem[i] === localizacao && idadeComprador >= 18) {
console.log(`Achei meu destino, siga para`, destinosViagem[i]);
break;
}
else if (localizacao !== destinosViagem[i]) {
console.log(`Destino não encontrado`);
break;
}
i++;
}