Estructuras de control IF
Hasta ahora, el código se ejecutaba de arriba abajo, línea por línea, siempre igual. Las estructuras de control permiten romper esa línea recta: el programa puede elegir un camino u otro según lo que ocurra.
if es la más básica y la más usada. Se lee literalmente como “si pasa esto, haz aquello”.
Objetivos
Sección titulada «Objetivos»Al terminar esta lección deberías ser capaz de:
- Escribir un
if, unelsey una cadena deelse if. - Entender qué valores se consideran
truey cuálesfalseen una condición. - Usar
switchcuando comparas un mismo valor contra varias opciones. - Anidar condiciones y mantener el código legible.
- Evitar los errores típicos al escribir condiciones.
La idea: un camino que se bifurca
Sección titulada «La idea: un camino que se bifurca»Imagina que sales de casa y decides: “Si llueve, cojo paraguas; si no, salgo sin él”. El programa hace exactamente lo mismo con datos.
const llueve = true;
if (llueve) { console.log("Cojo el paraguas ☂️");}Partes de la estructura:
| Parte | Qué hace |
|---|---|
if |
Palabra clave que inicia la decisión. |
(llueve) |
La condición: algo que se evalúa como true o false. |
{ ... } |
El bloque de código que se ejecuta solo si la condición es verdadera. |
Si la condición es false, el bloque se salta por completo y el programa sigue con lo que venga después:
const llueve = false;
if (llueve) { console.log("Esto no se imprime");}
console.log("Esta línea sí se imprime siempre");else: el camino alternativo
Sección titulada «else: el camino alternativo»Cuando quieres hacer algo también en el caso contrario, añades else:
const llueve = false;
if (llueve) { console.log("Cojo el paraguas");} else { console.log("Salgo sin paraguas");}// → "Salgo sin paraguas"Solo se ejecuta uno de los dos bloques, nunca ambos.
else if: varias opciones
Sección titulada «else if: varias opciones»Para más de dos caminos, se encadenan condiciones. JavaScript las evalúa en orden y se queda con la primera que sea verdadera:
const nota = 7;
if (nota >= 9) { console.log("Sobresaliente");} else if (nota >= 7) { console.log("Notable");} else if (nota >= 5) { console.log("Aprobado");} else { console.log("Suspenso");}// → "Notable"El else final es opcional, pero conviene dejarlo para contemplar “todo lo demás”.
¿Qué cuenta como verdadero o falso?
Sección titulada «¿Qué cuenta como verdadero o falso?»La condición no tiene que ser una comparación: puede ser cualquier valor. JavaScript lo convierte a booleano internamente. Por eso existen los conceptos truthy (se comporta como verdadero) y falsy (se comporta como falso).
Los únicos valores falsy son estos siete:
| Valor | Tipo |
|---|---|
false |
boolean |
0 |
number |
-0 |
number |
"" (texto vacío) |
string |
null |
null |
undefined |
undefined |
NaN |
number |
Todo lo demás es truthy, incluidos casos que sorprenden:
if (0) console.log("no se imprime");if (1) console.log("sí se imprime"); // 1 es truthyif ("") console.log("no se imprime");if ("hola") console.log("sí se imprime"); // cualquier texto no vacío es truthyif ("0") console.log("sí se imprime"); // el texto "0" NO es el número 0const nombre = "";
if (nombre) { console.log("Hola, " + nombre);} else { console.log("No escribiste ningún nombre");}// → "No escribiste ningún nombre"Condiciones con comparaciones
Sección titulada «Condiciones con comparaciones»Lo habitual es combinar if con los operadores de comparación y los operadores lógicos:
const edad = 20;const tieneEntrada = true;
if (edad >= 18 && tieneEntrada) { console.log("Puedes entrar");} else { console.log("No puedes entrar");}| Operador | Significado | Ejemplo |
|---|---|---|
&& |
Y: ambas deben ser true | edad >= 18 && tieneEntrada |
|| |
O: basta una | esAdmin || esInvitado |
! |
NO: invierte el valor | !estaBloqueado |
const estaBloqueado = false;
if (!estaBloqueado) { console.log("Acceso permitido");}Anidar if (un if dentro de otro)
Sección titulada «Anidar if (un if dentro de otro)»Se puede, pero conviene no abusar: demasiados niveles hacen el código difícil de leer.
const usuario = "Ana";const esAdmin = true;
if (usuario) { if (esAdmin) { console.log("Bienvenida al panel de administración, Ana"); } else { console.log("Bienvenida, Ana"); }}A menudo se puede escribir mejor con &&:
if (usuario && esAdmin) { console.log("Bienvenida al panel de administración");}Alternativa: switch
Sección titulada «Alternativa: switch»Cuando comparas un mismo valor contra muchas opciones fijas, switch puede quedar más ordenado que una cadena larga de else if:
const dia = "lunes";
switch (dia) { case "lunes": console.log("Empieza la semana"); break; case "viernes": console.log("¡Casi fin de semana!"); break; default: console.log("Un día normal");}Buenas prácticas
Sección titulada «Buenas prácticas»- Usa siempre llaves
{}, aunque el bloque tenga una sola línea. Evita sustos al añadir líneas después. - Indentación de 2 espacios dentro del bloque para que se vea la jerarquía.
- Usa
===, nunca==, y mucho menos=dentro de la condición. - Nombres de condición claros:
if (puedeEntrar)se entiende mejor queif (x).
// ❌ Sin llaves y con asignación por errorif ((edad = 18)) console.log("Entra");
// ✅ Claro y seguroif (edad === 18) { console.log("Entra");}Errores frecuentes
Sección titulada «Errores frecuentes»| Error | Consecuencia | Solución |
|---|---|---|
if (x = 5) en vez de if (x === 5) |
Asigna 5 y la condición siempre es truthy | Usa === |
| Olvidar las llaves | Solo la primera línea depende del if |
Añade {} siempre |
| Condiciones en orden incorrecto | Un caso general tapa a los específicos | Ordena de específico a general |
Demasiados else if anidados |
Código difícil de mantener | Agrupa con && o usa switch |
Ejercicio
Sección titulada «Ejercicio»- Crea
let hora = 14y escribe una cadenaif / else if / elseque muestre “Buenos días” (5–11), “Buenas tardes” (12–19) o “Buenas noches” (resto). - Cambia
horavarias veces y comprueba que siempre sale el saludo correcto. - Usa
if / elsepara mostrar “Aprobado” si una nota es>= 5y “Suspenso” en caso contrario. - Predice qué imprime este código y compruébalo:
if ("0") { console.log("A");} else { console.log("B");}Resumen
Sección titulada «Resumen»ifejecuta un bloque solo si la condición es verdadera;elsecubre el caso contrario.else ifpermite varios caminos y se evalúa en orden, quedándose con el primero verdadero.- Solo siete valores son falsy; todo lo demás es truthy (incluido el texto
"0"). &&,||y!combinan condiciones.switches una alternativa ordenada cuando comparas un mismo valor contra muchas opciones.- Usa llaves siempre,
===para comparar y condiciones con nombres claros.
Siguiente paso: Estructuras de control WHILE.