Valores truthy e falsy
Aqui vai um truque que você vai usar todo dia. A condição de um if não precisa
ser uma comparação: o JavaScript consegue olhar qualquer valor e decidir se
ele "conta como verdadeiro". Há uma lista curtinha de valores falsy (eles se
comportam como false) e todo o resto é truthy. Você só precisa decorar a
lista curta; o resto sai por eliminação.
Valores falsy (são só estes seis, você decora em um minuto):
false
0
"" // string vazia
null
undefined
NaN // "Not a Number": resultado de uma operação numérica inválida
NaN(Not a Number) aparece quando uma operação numérica não tem um resultado válido, por exemploNumber("olá")ou0 / 0. É do tiponumber, mas representa "não é um número válido", e é falsy.
Exemplos:
if ("olá") console.log("strings com texto são truthy");
if (0) console.log("isto NÃO é executado");
if ([]) console.log("um array vazio é truthy!");
Esse array vazio truthy pega todo mundo de surpresa na primeira vez, fique esperto. Essa ideia é ouro puro para verificar num piscar de olhos se uma variável "tem algo dentro":
const nome = "";
if (nome) {
console.log("Olá " + nome);
} else {
console.log("Falta o nome"); // executa: "" é falsy
}
O operador ternário
É o if/else de bolso: um if/else que cabe em uma linha e que retorna um
valor. Quando você só quer escolher entre duas opções para uma variável, ele te
economiza quatro linhas. Sua sintaxe é:
condição ? valorSeVerdadeiro : valorSeFalso
const idade = 20;
const mensagem = idade >= 18 ? "Adulto" : "Menor";
console.log(mensagem); // "Adulto"
É ideal para atribuições simples. Mas não se empolgue aninhando ternários dentro
de ternários: se você precisar apertar os olhos para ler, volte para o bom e velho
if/else. A legibilidade ganha sempre.
Exemplos
O usuário preencheu o nome? (truthy)
const usuario = "";
if (usuario) {
console.log("Bem-vindo, " + usuario);
} else {
console.log("Usuário anônimo");
}
Nível do jogador conforme os pontos (ternário)
const pontos = 80;
const nivel = pontos >= 50 ? "avançado" : "iniciante";
console.log("Nível:", nivel);