Ejercicio: Errores, depuración y almacenamiento
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.
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.
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.