Na minha concepção de iniciante, o parâmetro de if é a condição pra que ele seja realizado, por que sem uma condição em "se", os comandos repassados no bloco nem sequer acontecem.
Essa condição pode ser ligada diretamente ao else já que qualquer coisa que vá contra a condição dada pelo if anterior vai ativar o bloco de comandos do else.
Mas a condição de if é verdadeira mesmo que dentro dela tenha uma variável booleana falsa.
Além disso, imagino que seja possível você declarar um if como falso em formato de variável.
if(tempo == false) { document.write("Errou !") }
Já para os contadores, eles são necessários para que o seu loop avance.
Sempre que você lê um loop (while, for, setInterval) imagine os comandos do bloco do loop sendo executados em ordem.
var contador = 30;
while(contador <= 40) {
if( contador == 33 ) {
contador = contador + 1;
}
if(contador == 37) {
contador = contador + 1;
}
else {
mostra(contador);
contador = contador + 1;
}
}
No caso, a estrutura da resposta do professor é --->
Declara o valor inicial do contador.
Enquanto esse contador for menor ou igual a 40 executa o seguinte ---> :
Imprime os números de 30 a 40, se o contador passar pelos números 33 e 37, ele pula aquele número.
No caso, pra lógica fazer mais sentido seria legal ler o else primeiro na sua cabeça.
Exemplo ---> mostra o valor 30 (contador) |
esse contador então passa a ser 30 + 1
mostra o valor de 31 |
esse contador passa a ser 31 + 1
mostra o valor de 32 |
esse contador passa a ser 32 + 1...
Sem o contador sendo atualizado, o valor ficaria estagnado.
"Mostra o valor de 32."
"Como não houve incremento, o valor se mantém 32."
Ou seja, o valor novo sempre será guardado pelo browser para ser utilizado no próximo comando.
Só que se o contador chegar em 33, ao invés dele ser impresso, a linha de código é imediatamente trocada pra 34, entende ? o 33 nunca chega a ver a luz do sol. Existem outras maneiras de pular o 33 mas essa solução do professor é bem interessante.
A única diferença é que o professor aplicou as exceções antes da regra, que nesse caso foi o else.
Mas existem vários casos onde podem existir dois if's e nenhum else ou variações disso, então não é bom se prender muito nisso, é melhor analisar a estrutura do código como um todo, indo passo a passo e pensando nos loops, condições, variáveis e funções como ferramentas para um fim, sem necessariamente se prender em "tenho que ter um else junto desse if..." ou preciso declarar isso por que no outro código foi assim.
Você pode ler o código como :
"se(contador for igual a 33) {
contador é 34 }"
Outra dica, use bastante o "++" nos seus códigos, economiza bastante tempo.
Ao invés de escrever contador = contador + 1 fica mais fácil e rápido de ler contador++
Espero ter ajudado :)