JavaScript de Cero a Experto / Operadores y control
Operadores lógicos: &&, || y ??
Las decisiones reales rara vez dependen de UNA condición: "si alcanza el
saldo Y hay stock", "si es fin de semana O festivo". Los operadores lógicos
—&&, ||, !— combinan condiciones para formar preguntas complejas. Y
conocerás ??, el operador moderno para valores por defecto que evita una
trampa clásica.
Y, O, NO
Cortocircuito: JavaScript es perezoso (para bien)
JavaScript evalúa las condiciones de izquierda a derecha y PARA en cuanto sabe el resultado:
// con && : si el PRIMERO es false, ya no revisa el segundo (todo será false)
false && carisimoDeCalcular(); // no ejecuta la función: ya sabe que es false
// con || : si el PRIMERO es true, ya no revisa el segundo (todo será true)
true || carisimoDeCalcular(); // no ejecuta la función: ya sabe que es trueEsto se llama "cortocircuito" y no es solo eficiencia: es un patrón útil.
usuario && usuario.nombre solo lee .nombre SI usuario existe (evita el
error de leer una propiedad de "nada"). Lo verás mucho.
?? : valores por defecto sin trampa
Un uso clásico de || es dar un valor por defecto: "usa el nombre, o
'Invitado' si no hay". Pero tiene una trampa, y ?? la resuelve:
La diferencia: || usa el default para cualquier valor "falsy" (incluidos
0 y "", que a veces SON válidos), mientras que ?? (nullish
coalescing) solo lo usa para null o undefined —el verdadero "no hay
nada"—. Para valores por defecto, ?? suele ser lo que quieres: respeta el
0 y el string vacío como datos legítimos. (Qué es "falsy" lo desmenuza la
próxima lección.)
Un usuario puede tener 0 mensajes sin leer. Escribes const noLeidos = datos.noLeidos || 5. Si datos.noLeidos es 0, ¿qué pasa y qué deberías usar?
Mini-reto
En "Mi Bolsillo": crea condiciones combinadas. Con const saldo = 50000,
const precio = 30000, const promoActiva = true, evalúa: ¿puedes comprar Y
aprovechar la promo? (saldo >= precio && promoActiva). ¿Es día de compra si
esQuincena O hayDescuento? Y usa ?? para un const limiteDiario = config.limite ?? 100000 que respete un límite de 0 si el usuario lo pone a
propósito.
Qué sigue
Usaste || y ?? con valores "falsy", pero ¿qué cuenta EXACTAMENTE como
verdadero o falso cuando no es un boolean puro? La próxima lección revela
las reglas de "truthy" y "falsy" —cómo JavaScript decide si un valor
cualquiera "vale como true"—, clave para escribir condiciones limpias.