João Victor, boa noite!
É importante você analisar este trecho do código:
var idade = parseInt(prompt("Qual é sua idade"));
var temCarteira = prompt("Tem carteira? Responda S ou N");
if( idade >= 18 && temCarteira == "S") {
mostra("Pode dirigir");
} else {
mostra("Não pode dirigir");
}
Veja que na primeira linha o usuário digita a idade, neste caso pode ser qualquer valor (18, 17, 25, 50...). Na segunda linha o usuário digita uma resposta que pode ser 'S' ou 'N'. Os valores digitados são armazenados nas variáveis idade e temCarteira, respectivamente.
Em seguida o programa testa os valores dessas variáveis para chegar em uma conclusão:
if( idade >= 18 && temCarteira == "S")
Por exemplo, suponha que o usuário digitou que tem 20 anos e que possui carteira ("S"). Neste caso, o programa testa 20 >= 18 = VERDADEIRO
"S" == "S" = VERDADEIRO
De acordo com a tabela verdade do operador AND, temos que VERDADEIRO AND VERDADEIRO = VERDADEIRO, ou seja, o programa irá executar a linha:
mostra("Pode dirigir");
Entretanto, se considerar que o usuário digitou que tem 20 anos mas que não possui carteira ("N"), então temos:
20 >= 18 = VERDADEIRO
"N" == "S" = FALSO
De acordo com a tabela verdade VERDADEIRO AND FALSO = FALSO, dessa maneira a linha executada é a que está dentro do bloco "else" (senão):
mostra("Não pode dirigir");
Resumindo, se o resultado for VERDADEIRO o programa executa o que está no bloco imediatamente abaixo do if. Se o resultado das comparações for FALSO o programa executa o que está no bloco "else".
É importante observar também que a função "mostra" recebe um argumento "frase" e que as frases passadas como parâmetros nos dois blocos: "if" e "else" são diferentes.
Espero ter ajudado.