🛡️ Manejo de Errores (try/catch)
Aprende a manejar errores de forma profesional para que tu aplicación no se rompa inesperadamente. Controla los errores y brinda una mejor experiencia al usuario.
1. ¿Qué son los errores?
Los errores son problemas que ocurren durante la ejecución del código y que pueden detener tu programa. Pueden ser causados por:
- • Código mal escrito (errores de sintaxis)
- • Usar variables que no existen
- • Intentar hacer operaciones imposibles (dividir entre undefined)
- • Datos incorrectos del usuario
- • Problemas de red o servidor
Sin manejo de errores:
1const datos = '{"nombre": "Ana", edad: 25}'; // ❌ JSON inválido2 3// Esto rompe el programa4const usuario = JSON.parse(datos);5console.log(usuario.nombre);6 7// ❌ Error: Unexpected token e in JSON at position 188// El código se detiene aquí y no continúa9console.log('Este mensaje nunca se muestra');❌ Problema:
Cuando ocurre un error sin control, todo el programa se detiene y el usuario ve una página rota. ¡Mala experiencia!
2. try/catch - Capturar errores
try/catch te permite "intentar" ejecutar código y "capturar" el error si algo sale mal, sin romper el programa.
Sintaxis:
1try {2 // Código que puede fallar3} catch (error) {4 // Qué hacer si hay error5}Ejemplo básico:
1const datos = '{"nombre": "Ana", edad: 25}'; // JSON inválido2 3try {4 // Intenta parsear el JSON5 const usuario = JSON.parse(datos);6 console.log(usuario.nombre);7} catch (error) {8 // Si hay error, muestra un mensaje amigable9 console.log('❌ Error al procesar los datos');10 console.log('Detalles:', error.message);11}12 13// ✅ El programa continúa normalmente14console.log('El programa sigue funcionando');✅ Ventaja:
Con try/catch, el programa no se rompe. Puedes mostrar un mensaje amigable al usuario y continuar con otras operaciones.
3. El objeto error
Cuando ocurre un error, JavaScript crea un objeto de error con información útil:
Propiedades útiles:
error.message- Descripción del errorerror.name- Tipo de errorerror.stack- Rastro completo
Tipos comunes:
- SyntaxError - Sintaxis incorrecta
- ReferenceError - Variable no existe
- TypeError - Tipo incorrecto
- RangeError - Valor fuera de rango
1try {2 const resultado = funcionQueNoExiste();3} catch (error) {4 console.log('Nombre del error:', error.name);5 // 'ReferenceError'6 7 console.log('Mensaje:', error.message);8 // 'funcionQueNoExiste is not defined'9 10 console.log('Error completo:', error);11 // Muestra todo el objeto de error12}4. finally - Siempre se ejecuta
El bloque finally se ejecuta siempre, haya error o no. Útil para limpiar recursos.
1function procesarArchivo() {2 console.log('📂 Abriendo archivo...');3 4 try {5 // Intentar leer el archivo6 const datos = JSON.parse(archivoInvalido);7 console.log('✅ Datos procesados');8 } catch (error) {9 console.log('❌ Error:', error.message);10 } finally {11 // Se ejecuta SIEMPRE (haya error o no)12 console.log('🔒 Cerrando archivo...');13 }14}15 16procesarArchivo();17// Salida:18// 📂 Abriendo archivo...19// ❌ Error: archivoInvalido is not defined20// 🔒 Cerrando archivo...💡 Casos de uso de finally:
- • Cerrar conexiones a bases de datos
- • Ocultar indicadores de carga
- • Liberar recursos
- • Limpiar estados temporales
5. throw - Lanzar errores personalizados
Puedes crear tus propios errores con throw para validar datos o condiciones.
1function dividir(a, b) {2 if (b === 0) {3 throw new Error('No se puede dividir entre cero');4 }5 return a / b;6}7 8// Ejemplo 1: División válida9try {10 const resultado = dividir(10, 2);11 console.log('Resultado:', resultado);12 // Resultado: 513} catch (error) {14 console.log('❌ Error:', error.message);15}16 17// Ejemplo 2: División inválida18try {19 const resultado = dividir(10, 0);20 console.log('Resultado:', resultado);21} catch (error) {22 console.log('❌ Error:', error.message);23 // ❌ Error: No se puede dividir entre cero24}💡 ¿Cuándo usar throw?
- • Validar formularios (edad, email, contraseñas)
- • Verificar que los datos sean del tipo correcto
- • Prevenir operaciones imposibles (como dividir entre 0)
📝 Ejercicio práctico
Procesar JSON de forma segura
Crea un código que intente parsear un JSON y maneje el error si el JSON es inválido.
Pasos:
- Crea una variable con un JSON inválido (ej: sin comillas en las claves)
- Usa try/catch para intentar parsearlo
- Si funciona, muestra los datos
- Si falla, muestra un mensaje de error
Ver solución
1// JSON inválido (sin comillas en las claves)2const jsonInvalido = '{nombre: "Ana", edad: 25}';3 4try {5 const usuario = JSON.parse(jsonInvalido);6 console.log('Usuario:', usuario);7} catch (error) {8 console.log('❌ Error al parsear JSON');9 console.log('Detalle:', error.message);10}11 12// JSON válido13const jsonValido = '{"nombre": "Luis", "edad": 30}';14 15try {16 const usuario = JSON.parse(jsonValido);17 console.log('✅ Usuario cargado:', usuario.nombre);18} catch (error) {19 console.log('❌ Error al parsear JSON');20}💡 Nota: Practicaremos más try/catch cuando veamos Fetch API y llamadas a servidores.
📚 Resumen
try/catch
Captura errores para que el programa no se rompa
try { ... } catch(e) { ... }
finally
Se ejecuta siempre (con o sin error)
finally { cleanup() }
throw
Lanza un error personalizado
throw new Error('mensaje')
error.message
Descripción del error
catch(error) { error.message }