Olá Gabriela
Primeiramente o contador é defenido como 0, então função só irá funcionar enquanto o contador for até 2.
No primeiro if está acontecendo uma validação se a variavel array listaDeDestinos na posição 0, que é quanto vale a variavel contador atualmente, se ela é igual a variavel destino.
Ou seja se listaDeDestinos[contador] que é 'Salvador' é igual a 'Rio de Janeiro'.
Como essa comparação não é verdade irá acontecer oque esta no else, "Destino não existe".
Logo em seguida a variavel contador recebe
contador += 1;
isso é o mesmo que
contador = contador + 1;
Agora contador passa a ter o valor de 1, em seguida continuara o loop ja que contador continua sendo menor que 3, porém agora listaDeDestinos[contador] trará o valor de 'São Paulo'.
Mas a comparação ainda será falsa. Somente no ultimo loop aparecera a mensagem dentro do if.
Segue abaixo o código com alguns consoles para mostrar melhor oque esta acontecendo dentro do while:
console.log(`\nTrabalhando com condicionais`);
const listaDeDestinos = new Array(`Salvador`, `São Paulo`, `Rio de Janeiro`);
const idadeComprador = 17;
const estaAcompanhada = false;
let temPassagemComprada = false;
const destino = "Rio de Janeiro";
console.log("\n Destinos possíveis:");
console.log(listaDeDestinos);
const podeComprar = idadeComprador >= 18 || estaAcompanhada == true;
let contador = 0;
while (contador < 3) {
console.log("\n\nValor do contador no inicio: " + contador);
console.log("Valor da comparação: ");
console.log(listaDeDestinos[contador] == destino);
if (listaDeDestinos[contador] == destino) {
console.log("Destino existe");
} else {
console.log("Destino não existe");
}
contador += 1;
console.log("Valor do contador no fim: " + contador);
}