Fiz o código e rodou normal. A minha dúvida é: Se no ínicio da execução do programa, o vetor 'ingredientes' está vazio (ou seja ingredientes.length é 0), como o laço for é executado, já que 'posicao' inicialmente também é 0 e (0<0) devolve false?
<meta charset="UTF-8">
<h1>Receitas do Yan</h1>
<script>
var ingredientes = [];
var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
var contador = 1;
while( contador <= quantidade) {
var ingrediente = prompt("Informe o ingrediente " + contador);
var achou = false;
for(var posicao = 0; posicao < ingredientes.length; posicao++){
if(ingrediente == ingredientes[posicao]){
achou = true;
break;
}
}
if(achou == false){
ingredientes.push(ingrediente);
contador++;
}
}
for(var contador1 = 0; contador1 < ingredientes.length; contador1++){
document.write((contador1 + 1) + " - " + ingredientes[contador1] + "<br>");
}
console.log(ingredientes);
</script>