Condicionales en JavaScript: if, else, switch y operador ternario
Actualizado el 29 de septiembre de 2026
Los condicionales le permiten a un programa tomar decisiones: mostrar un mensaje distinto si el usuario inició sesión, cobrar otro precio según la edad, avisar si un formulario tiene errores. En JavaScript hay tres herramientas: if/else, switch y el operador ternario.
En esta guía vas a ver las tres, cuándo conviene cada una y un detalle propio de JavaScript que conviene conocer bien: qué valores cuentan como verdaderos y cuáles como falsos.
if, else if y else
const nota = 5.5;
let concepto;
if (nota >= 6.0) {
concepto = "Muy bueno";
} else if (nota >= 5.0) {
concepto = "Bueno";
} else if (nota >= 4.0) {
concepto = "Suficiente";
} else {
concepto = "Insuficiente";
}
// concepto → "Bueno"La condición va entre paréntesis y el bloque entre llaves. Las condiciones se revisan de arriba hacia abajo y se ejecuta solo la primera que se cumple. Por eso el segundo caso no necesita decir nota < 6.0: si llegó ahí, la primera condición ya fue falsa.
Truthy y falsy
La condición de un if puede ser cualquier valor, no solo true o false. JavaScript considera falsos (falsy) exactamente estos: false, 0, "", null, undefined y NaN. Todo lo demás es verdadero (truthy), incluidos algunos que sorprenden:
Boolean([]) // true — un array vacío es truthy
Boolean({}) // true
Boolean("0") // true — es un texto no vacío
Boolean(" ") // truePara saber si un array está vacío, pregunta por su largo: if (carrito.length === 0). if (!carrito) nunca se cumple con un array.
El operador ternario
const edad = 17;
const estado = edad >= 18 ? "mayor" : "menor";
// estado → "menor"condición ? valorSiSí : valorSiNo elige entre dos valores en una expresión. Es muy usado para asignar o para armar textos, pero con más de dos casos (ternarios anidados) se vuelve ilegible: ahí conviene un if.
switch
switch compara un valor contra una lista de casos con ===. Es cómodo cuando la decisión depende de un solo valor que puede tomar varias opciones fijas:
switch (metodoPago) {
case "debito":
case "credito":
comision = 0.02;
break;
case "transferencia":
comision = 0;
break;
default:
comision = null;
}Cada caso termina con break; sin él, la ejecución sigue en el caso siguiente. Eso se aprovecha para agrupar casos, como "debito" y "credito" arriba. default cubre todo lo que no coincidió.
Errores comunes
Asignar en vez de comparar
let x = 3;
if (x = 5) {
// siempre entra, y ahora x vale 5
}A diferencia de Python, JavaScript no da error: x = 5 asigna y devuelve 5, que es truthy. Compara siempre con ===.
Olvidar el break en un switch
Sin break, al entrar en un caso se ejecutan también todos los siguientes hasta encontrar un break o el final. Si un switch hace más de lo que esperabas, revisa los break. Dentro de una función, un return en cada caso también corta la ejecución.
switch compara con ===
case 1: no coincide con el texto "1". Si el valor viene de un formulario o de la URL, conviértelo con Number() antes del switch.
Condiciones en el orden equivocado
Si la primera condición es nota >= 4.0, un 6.5 entra ahí y nunca llega a nota >= 6.0. Con condiciones que se solapan, ordénalas de la más exigente a la menos exigente.
Ejercicios resueltos
Intenta resolver cada ejercicio antes de abrir la solución: equivocarse y corregir es la parte que más enseña.
1.Positivo, negativo o cero
Escribe una función clasificarNumero(n) que devuelva "positivo", "negativo" o "cero".
clasificarNumero(8)→"positivo"clasificarNumero(-3)→"negativo"clasificarNumero(0)→"cero"
function clasificarNumero(n) {
// ...
}Ver soluciónOcultar solución
function clasificarNumero(n) {
if (n > 0) {
return "positivo";
} else if (n < 0) {
return "negativo";
} else {
return "cero";
}
}Tres casos que no se solapan: mayor, menor o, si no es ninguno, igual a cero. El else final no necesita condición. Como cada rama termina en return, también se podría escribir sin los else, pero así se lee explícitamente que los casos son excluyentes.
2.Concepto según la nota
Con la escala chilena de 1.0 a 7.0, escribe calificar(nota): "Muy bueno" desde 6.0, "Bueno" desde 5.0, "Suficiente" desde 4.0 e "Insuficiente" bajo 4.0.
calificar(6.5)→"Muy bueno"calificar(5.0)→"Bueno"calificar(3.9)→"Insuficiente"
function calificar(nota) {
// ...
}Ver soluciónOcultar solución
function calificar(nota) {
if (nota >= 6.0) return "Muy bueno";
if (nota >= 5.0) return "Bueno";
if (nota >= 4.0) return "Suficiente";
return "Insuficiente";
}Esta versión usa return temprano: cada if devuelve y termina la función, así que no hacen falta else. Es un estilo muy común en JavaScript. El orden sigue siendo lo importante: del umbral más alto al más bajo, con >= para que 5.0 quede en "Bueno".
3.Día de la semana
Escribe una función diaDeLaSemana(numero) que devuelva el nombre del día (1 es lunes, 5 es viernes). Para 6 y 7 debe devolver "fin de semana", y para cualquier otro valor, "número inválido".
diaDeLaSemana(1)→"lunes"diaDeLaSemana(7)→"fin de semana"diaDeLaSemana(9)→"número inválido"
function diaDeLaSemana(numero) {
// ...
}Ver soluciónOcultar solución
function diaDeLaSemana(numero) {
switch (numero) {
case 1: return "lunes";
case 2: return "martes";
case 3: return "miércoles";
case 4: return "jueves";
case 5: return "viernes";
case 6:
case 7:
return "fin de semana";
default:
return "número inválido";
}
}Un solo valor que se compara contra opciones fijas es el caso ideal para switch. Como cada caso hace return, no hace falta break. El 6 no tiene código propio: "cae" al caso 7, que es la forma de agrupar casos. Ojo: diaDeLaSemana("1") devuelve "número inválido", porque switch compara con ===.