Ir al contenido

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”.

Al terminar esta lección deberías ser capaz de:

  • Escribir un if, un else y una cadena de else if.
  • Entender qué valores se consideran true y cuáles false en una condición.
  • Usar switch cuando comparas un mismo valor contra varias opciones.
  • Anidar condiciones y mantener el código legible.
  • Evitar los errores típicos al escribir condiciones.

Imagina que sales de casa y decides: “Si llueve, cojo paraguas; si no, salgo sin él”. El programa hace exactamente lo mismo con datos.

if-basico.js
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:

se-salta.js
const llueve = false;
if (llueve) {
console.log("Esto no se imprime");
}
console.log("Esta línea sí se imprime siempre");

Cuando quieres hacer algo también en el caso contrario, añades else:

if-else.js
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.

Para más de dos caminos, se encadenan condiciones. JavaScript las evalúa en orden y se queda con la primera que sea verdadera:

else-if.js
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”.

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:

truthy-falsy.js
if (0) console.log("no se imprime");
if (1) console.log("sí se imprime"); // 1 es truthy
if ("") console.log("no se imprime");
if ("hola") console.log("sí se imprime"); // cualquier texto no vacío es truthy
if ("0") console.log("sí se imprime"); // el texto "0" NO es el número 0
comprobar-vacio.js
const nombre = "";
if (nombre) {
console.log("Hola, " + nombre);
} else {
console.log("No escribiste ningún nombre");
}
// → "No escribiste ningún nombre"

Lo habitual es combinar if con los operadores de comparación y los operadores lógicos:

condiciones-reales.js
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
operador-no.js
const estaBloqueado = false;
if (!estaBloqueado) {
console.log("Acceso permitido");
}

Se puede, pero conviene no abusar: demasiados niveles hacen el código difícil de leer.

anidado.js
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 &&:

anidado-simplificado.js
if (usuario && esAdmin) {
console.log("Bienvenida al panel de administración");
}

Cuando comparas un mismo valor contra muchas opciones fijas, switch puede quedar más ordenado que una cadena larga de else if:

switch.js
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");
}
  • 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 que if (x).
buenas-practicas.js
// ❌ Sin llaves y con asignación por error
if ((edad = 18)) console.log("Entra");
// ✅ Claro y seguro
if (edad === 18) {
console.log("Entra");
}
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
  1. Crea let hora = 14 y escribe una cadena if / else if / else que muestre “Buenos días” (5–11), “Buenas tardes” (12–19) o “Buenas noches” (resto).
  2. Cambia hora varias veces y comprueba que siempre sale el saludo correcto.
  3. Usa if / else para mostrar “Aprobado” si una nota es >= 5 y “Suspenso” en caso contrario.
  4. Predice qué imprime este código y compruébalo:
if ("0") {
console.log("A");
} else {
console.log("B");
}
  • if ejecuta un bloque solo si la condición es verdadera; else cubre el caso contrario.
  • else if permite 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.
  • switch es 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.