Saltar al contenido
Curso de JavaScript
Todos los cursos

Ejercicio: Errores, depuración y almacenamiento

  • ⏱ 40 minutos
  • 📶 Nivel: principiante

Objetivo

Controlar errores y guardar datos: una división segura, un analizador de JSON, y una pequeña capa de almacenamiento con localStorage (leer, guardar, añadir tareas y contar visitas).

Antes de empezar

Estas funciones no necesitan una página. El comprobador usa un localStorage simulado, vacío al empezar, para que el resultado no dependa de tu navegador.

▶ Prueba tu código aquí (opcional)
Consola

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: valor por defecto al leer

JSON.parse(localStorage.getItem("tareas")) ?? [] cubre el caso «no hay nada». Y envuélvelo en try/catch por si el texto guardado no es JSON válido.

💡 Pista 2: `contarVisita`

Lo guardado es texto: Number(localStorage.getItem("visitas") ?? 0) + 1, y vuelve a guardarlo con setItem.

🔎 Comprueba tu trabajo

Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista.

    ✅ Ver una solución de ejemplo

    Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

    app.js
    function dividirSeguro(a, b) {
      if (b === 0) {
        throw new Error("No se puede dividir entre cero");
      }
      return a / b;
    }
    
    function analizarJSON(texto) {
      try {
        return { ok: true, datos: JSON.parse(texto) };
      } catch (error) {
        return { ok: false, error: error.message };
      }
    }
    
    function leerTareas() {
      try {
        return JSON.parse(localStorage.getItem("tareas")) ?? [];
      } catch {
        return [];
      }
    }
    
    function guardarTareas(tareas) {
      localStorage.setItem("tareas", JSON.stringify(tareas));
    }
    
    function agregarTarea(texto) {
      if (texto.trim() === "") {
        throw new Error("La tarea no puede estar vacía");
      }
      const tareas = leerTareas();
      tareas.push({ texto: texto.trim(), hecha: false });
      guardarTareas(tareas);
      return tareas;
    }
    
    function contarVisita() {
      const total = Number(localStorage.getItem("visitas") ?? 0) + 1;
      localStorage.setItem("visitas", String(total));
      return total;
    }

    💡 🏁 Reto extra (opcional)

    Escribe borrarTarea(indice) y marcarHecha(indice) que modifiquen la lista guardada y devuelvan la lista actualizada, lanzando un error claro si el índice no existe.