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(" ")   // true

Para 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"
Punto de partida
function clasificarNumero(n) {
  // ...
}
Ver solución
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"
Punto de partida
function calificar(nota) {
  // ...
}
Ver solución
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"
Punto de partida
function diaDeLaSemana(numero) {
  // ...
}
Ver solución
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 ===.

Practica JavaScript con ejercicios a tu nivel

En Coditer resuelves ejercicios en el navegador, con tests automáticos que revisan tu código y una IA que te da pistas cuando te atascas. Practicar es gratis.