Valores truthy y falsy
Aquí viene un truco que usarás a diario. La condición de un if no tiene por qué
ser una comparación: JavaScript es capaz de mirar cualquier valor y decidir si
"cuenta como verdadero". Hay una lista cortita de valores falsy (se comportan
como false) y todo lo demás es truthy. Solo tienes que memorizar la lista
corta; el resto cae por descarte.
Valores falsy (son solo estos seis, te los sabes de memoria en un minuto):
false
0
"" // string vacío
null
undefined
NaN // "Not a Number": resultado de una operación numérica inválida
NaN(Not a Number) aparece cuando una operación numérica no tiene un resultado válido, por ejemploNumber("hola")o0 / 0. Es de tiponumber, pero representa "no es un número válido", y es falsy.
Ejemplos:
if ("hola") console.log("los strings con texto son truthy");
if (0) console.log("esto NO se ejecuta");
if ([]) console.log("¡un array vacío es truthy!");
Ese array vacío truthy pilla a todo el mundo la primera vez, ojo. Esta idea es oro puro para comprobar de un vistazo si una variable "tiene algo dentro":
const nombre = "";
if (nombre) {
console.log("Hola " + nombre);
} else {
console.log("Falta el nombre"); // se ejecuta: "" es falsy
}
El operador ternario
Es el if/else de bolsillo: un if/else que cabe en una línea y que devuelve
un valor. Cuando solo quieres elegir entre dos opciones para una variable, te
ahorra cuatro líneas. Su sintaxis es:
condición ? valorSiVerdadero : valorSiFalso
const edad = 20;
const mensaje = edad >= 18 ? "Adulto" : "Menor";
console.log(mensaje); // "Adulto"
Es ideal para asignaciones simples. Pero no te emociones encadenando ternarios
dentro de ternarios: si tienes que entornar los ojos para leerlo, vuelve al
if/else de toda la vida. La legibilidad gana siempre.
Ejemplos
¿Rellenó el usuario su nombre? (truthy)
const usuario = "";
if (usuario) {
console.log("Bienvenido, " + usuario);
} else {
console.log("Usuario anónimo");
}
Nivel del jugador según sus puntos (ternario)
const puntos = 80;
const nivel = puntos >= 50 ? "avanzado" : "principiante";
console.log("Nivel:", nivel);