1. Condicionales: El Cruce de Caminos
El código normalmente se lee línea por línea, pero a veces necesitas tomar decisiones.
Analogía: El Semáforo
Imagina que llegas a un semáforo.
- IF (Si...): SI está verde, cruzas.
- ELSE IF (Si no, pero...): SI NO está verde, pero está ámbar, aceleras (o frenas).
- ELSE (Si no...): SI NO es ninguna de las anteriores (está rojo), te paras.
let semaforo = "rojo";
if (semaforo === "verde") {
console.log("¡Adelante!");
} else if (semaforo === "ambar") {
console.log("¡Precaución!");
} else {
console.log("¡STOP! No puedes pasar.");
}
1b. El Operador Ternario (El "If" rápido)
Existe una forma de escribir un if...else simple en una sola línea. Es muy popular entre los
programadores expertos.
// Estructura: condición ? valor_si_true : valor_si_false
let edad = 20;
let tipo = (edad >= 18) ? "Adulto" : "Menor";
console.log(tipo); // "Adulto"
Consejo de Sabio 🧙♂️
- ✅ Úsalo para ASIGNAR: Cuando quieres que una variable valga X o Y según una condición (como en el ejemplo de arriba).
- ❌ NO lo uses para LÓGICA: Si tienes que meter muchas instrucciones o
console.logdentro, usa unifnormal. Si el ternario es muy largo y difícil de leer, lo estás usando mal.
2. Switch: El Menú del Restaurante
Cuando tienes muchos else if seguidos, el código se vuelve feo. El switch es
más limpio para elegir una opción entre muchas.
let dia = "Lunes";
switch (dia) {
case "Lunes":
console.log("¡Ánimo con la semana!");
break; // 🛑 ¡Importante! Si no pones break, sigue leyendo hacia abajo ("Fall-through").
case "Viernes":
console.log("¡Por fin es viernes!");
break;
case "Sábado":
case "Domingo":
console.log("¡Fin de semana!");
break;
default:
console.log("Un día normal...");
// ℹ️ Aquí no hace falta break porque se acaba el switch.
}
3. Tipos de Bucles: ¿Cuál usar?
Existen varias formas de repetir código en JavaScript. No hay una "mejor" absoluta, sino una herramienta adecuada para cada trabajo.
A) Bucle For Clásico
El de toda la vida. Es el más versátil porque tienes control total. Úsalo cuando:
- Necesitas el índice (la posición) del elemento.
- Quieres recorrer el array al revés o saltando pasos (de 2 en 2).
- No estás trabajando con una lista, simplemente necesitas un contador.
// Ejemplo: Contar de 2 en 2 hasta 10
for (let i = 0; i <= 10; i += 2) {
console.log("Número par: " + i);
}
// Ejemplo: Recorrer array al revés
let letras = ["A", "B", "C"];
for (let i = letras.length - 1; i >= 0; i--) {
console.log(letras[i]); // Imprime C, B, A
}
B) Bucle For...of
Es la sintaxis más moderna y limpia. Es ideal exclusivamente para recorrer iterables (Arrays,
Strings) elemento a elemento.
Úsalo cuando: Quieres leer todos los elementos de una lista y no te importa su posición
(índice).
let frutas = ["Manzana", "Pera", "Plátano"];
// Mucho más limpio para leer listas
for (let fruta of frutas) {
console.log("Me gusta la " + fruta);
}
C) Bucle For...in
Este bucle está diseñado para recorrer las propiedades de un Objeto.
⚠️ Aviso: No se recomienda usar for...in para recorrer Arrays, ya que puede
ser más lento y no garantiza el orden numérico.
let coche = { marca: "Ford", modelo: "Mustang", anyo: 1969 };
for (let propiedad in coche) {
// propiedad valdrá "marca", luego "modelo"...
console.log(propiedad + ": " + coche[propiedad]);
}
Resumen Rápido
- ¿Es un Array o String? → Usa
for...of(más legible). - ¿Es un Objeto? → Usa
for...in(para las claves). - ¿Necesitas índices o contar? → Usa
forclásico.
3b. Bucles While y Do While
Los bucles while y do while son diferentes a los bucles for porque
no necesariamente sabes cuántas veces se repetirán. Se ejecutan mientras una condición sea
verdadera.
D) Bucle While (Mientras...)
El bucle while primero verifica la condición y luego ejecuta el código.
Si la condición es falsa desde el principio, el bucle nunca se ejecuta.
Analogía: La Pila de Platos
Imagina que estás lavando platos. Mientras haya platos sucios en la pila, seguirás lavando. Si la pila está vacía desde el principio, no lavas ningún plato.
// Sintaxis básica
while (condición) {
// Código a repetir
}
// Ejemplo: Contar mientras el número sea menor que 5
let numero = 1;
while (numero <= 5) {
console.log("Número: " + numero);
numero++; // ⚠️ ¡IMPORTANTE! Si no incrementas, es un bucle infinito
}
// Ejemplo práctico: Juego de adivinanzas
let secreto = 7;
let intento = 0;
while (intento !== secreto) {
intento = Math.floor(Math.random() * 10); // Número aleatorio 0-9
console.log("Intento: " + intento);
}
console.log("¡Adivinaste!");
E) Bucle Do While (Haz... Mientras)
El bucle do while primero ejecuta el código y luego verifica la condición.
Esto garantiza que el código se ejecute al menos una vez, incluso si la condición es falsa.
Analogía: El Menú del Restaurante
En un restaurante, el camarero siempre te pregunta al menos una vez si quieres postre, incluso si ya estás lleno. Después de tu respuesta, volverá a preguntar solo si dijiste "sí".
// Sintaxis básica
do {
// Código a ejecutar (se ejecuta AL MENOS 1 VEZ)
} while (condición);
// Ejemplo: Validar entrada del usuario
let respuesta;
do {
respuesta = prompt("¿Continuar? (si/no)");
} while (respuesta !== "si" && respuesta !== "no");
console.log("Respuesta válida: " + respuesta);
// Ejemplo: Contador que se ejecuta una vez aunque la condición sea falsa
let contador = 10;
do {
console.log("Contador: " + contador); // Se imprime "10" una vez
contador++;
} while (contador < 10); // La condición es falsa, pero ya se ejecutó una vez
⚠️ ¡Cuidado con los Bucles Infinitos!
Si la condición de un while o do while nunca se vuelve falsa,
el bucle seguirá ejecutándose eternamente y tu navegador se congelará.
// ❌ BUCLE INFINITO - ¡NO HAGAS ESTO!
while (true) {
console.log("Esto nunca termina...");
}
// ✅ CORRECTO - Siempre asegúrate de que la condición cambie
let i = 0;
while (i < 5) {
console.log(i);
i++; // La condición eventualmente será falsa
}
3c. ¿Cuándo usar cada bucle? - Guía de Decisión
Elegir el bucle correcto hace que tu código sea más legible y eficiente. Aquí está la guía definitiva:
🎯 Tabla de Decisión Rápida
| Situación | Bucle a Usar | Razón |
|---|---|---|
| Sabes EXACTAMENTE cuántas veces repetir | for |
Contador explícito y claro |
| Recorrer todos los elementos de un Array/String | for...of |
Sintaxis más limpia y legible |
| Recorrer propiedades de un Objeto | for...in |
Diseñado específicamente para objetos |
| NO sabes cuántas veces, depende de una condición | while |
Continúa hasta que algo cambie |
| Debe ejecutarse AL MENOS UNA VEZ | do while |
Garantiza una ejecución mínima |
| Validar entrada del usuario | do while |
Siempre preguntas al menos una vez |
| Leer datos hasta encontrar un valor específico | while |
No sabes cuándo aparecerá |
Ejemplos Comparativos
Ejemplo 1: Contar hasta 10
// ✅ MEJOR: for (sabes exactamente cuántas veces)
for (let i = 1; i <= 10; i++) {
console.log(i);
}
// ⚠️ FUNCIONA pero es innecesario complicado
let i = 1;
while (i <= 10) {
console.log(i);
i++;
}
Ejemplo 2: Buscar un valor en un array
let numeros = [3, 7, 12, 9, 15, 4];
let buscado = 9;
// ✅ MEJOR: for...of (recorrer elementos)
for (let num of numeros) {
if (num === buscado) {
console.log("¡Encontrado!");
break;
}
}
// ✅ TAMBIÉN VÁLIDO: while (si prefieres más control)
let indice = 0;
let encontrado = false;
while (indice < numeros.length && !encontrado) {
if (numeros[indice] === buscado) {
console.log("¡Encontrado en posición " + indice + "!");
encontrado = true;
}
indice++;
}
Ejemplo 3: Validar contraseña
// ✅ MEJOR: do while (debe preguntar al menos una vez)
let password;
do {
password = prompt("Introduce tu contraseña (mínimo 8 caracteres):");
} while (password.length < 8);
console.log("Contraseña válida!");
💡 Regla de Oro
- ¿Sabes cuántas veces? →
for - ¿Es una lista/array? →
for...of - ¿Es un objeto? →
for...in - ¿Condición desconocida? →
while - ¿Al menos una vez? →
do while
4. Controlando el Bucle: Break y Continue
A veces quieres salirte de la pista antes de terminar las vueltas.
Break (Freno de Emergencia)
Rompe el bucle y sale inmediatamente.
for (let i = 1; i <= 10; i++) {
if (i === 5) {
console.log("¡Encontré el 5! Me voy.");
break; // Deja de contar
}
console.log(i);
}
Continue (Saltar Turno)
Se salta la vuelta actual y pasa a la siguiente.
for (let i = 1; i <= 5; i++) {
if (i === 3) {
console.log("Me salto el 3");
continue; // No imprime el 3, pasa al 4
}
console.log("Número: " + i);
}