Olá Alex,
É possível alterar o while para um for, no entanto ao fazer isto o position++ sempre será chamado para cada etapa do loop, fazendo com que números sorteados 0 (zero) ou repetidos também sejam contados e ao final o array poderá ter menos do que os 8 números desejados.
Para obter o mesmo comportamento do while, neste caso, é necessário incluir else para os if que testam o 0 (zero) e os números repetidos, fazendo que o position seja decrementado:
function drawNumbers(quantity) {
var numbers = [];
for (var position = 0; position < quantity; position++) {
var randomNumberReturned = randomNumber();
if (randomNumberReturned != 0) {
var numberFound = false;
for (var j = 0; j < numbers.length; j++) {
if(randomNumberReturned == numbers[j]){
numberFound = true;
break;
}
}
if (numberFound == false) {
numbers.push(randomNumberReturned);
} else {
position--;
}
} else {
position--;
}
}
Desta forma, o array sempre terá 8 números sorteados (diferentes de zero e não repetidos). De qualquer forma, na minha opinião, seria melhor utilizar o while neste caso.