{"id":17733,"date":"2024-01-12T13:03:00","date_gmt":"2024-01-12T12:03:00","guid":{"rendered":"https:\/\/carontestudio.com\/blog\/?p=17733"},"modified":"2024-01-29T12:28:51","modified_gmt":"2024-01-29T11:28:51","slug":"explorando-el-local-storage-metodos-utiles-y-buenas-practicas","status":"publish","type":"post","link":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/","title":{"rendered":"Explorando el Local Storage: M\u00e9todos \u00datiles y Buenas Pr\u00e1cticas"},"content":{"rendered":"\n<p>El localStorage es una herramienta esencial a la hora de <a href=\"https:\/\/carontestudio.com\/formacion\/cursos-web-vitoria\/\">aprender desarrollo web<\/a> y que permite a los desarrolladores guardar informaci\u00f3n de manera persistente en el navegador del usuario. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es localStorage<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<p>LocalStorage es una propiedad para acceder al objeto localStorage de almacenamiento web, que te permite guardar pares clave valor en el navegador. Los datos permanecen <strong>guardados entre las diferentes sesiones.<\/strong><\/p>\n\n\n\n<p>La parte interesante de esto es que <strong>los datos almacenados persisten<\/strong>, aunque recargues la p\u00e1gina o incluso si el navegador es reiniciado.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"427\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/sahand-babali-GOiAKzoD12I-unsplash-1.jpg\" alt=\"Explorando el Local Storage: M\u00e9todos \u00datiles y Buenas Pr\u00e1cticas\" class=\"wp-image-18107\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/sahand-babali-GOiAKzoD12I-unsplash-1.jpg 640w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/sahand-babali-GOiAKzoD12I-unsplash-1-300x200.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">localStorage vs Cookies<\/h2>\n\n\n\n<p>Qu\u00e9 ventajas tiene esto respecto de las cookies:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Al contrario que las cookies, <strong>el objeto no se env\u00eda al servidor<\/strong> en cada petici\u00f3n. Debido a esto, la informaci\u00f3n que podemos almacenar es mayor, hasta 5 MB por dominio.<\/li>\n\n\n\n<li>Otra cosa es que <strong>no se pueden manipular v\u00eda HTTP<\/strong> (mediante peticiones GET o POST), sino que debe ser a trav\u00e9s de JavaScript.<\/li>\n\n\n\n<li>El almacenamiento est\u00e1<strong> vinculado al origen<\/strong>, es decir, si tienes dos subdominios diferentes, dos protocolos diferentes o dos puertos diferentes, los datos almacenados en localStorage ser\u00e1n distintos y no se compartir\u00e1n entre ellos. Esto proporciona un nivel adicional de seguridad y a\u00edsla los datos entre diferentes contextos de origen.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>D\u00f3nde encontrar el localStorage en tu navegador<\/strong><\/h2>\n\n\n\n<p>Por lo general en \u201cHerramientas para desarrolladores\u201d vamos a encontrar el local storage, en Chrome estar\u00e1 en la pesta\u00f1a de aplicaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"556\" height=\"264\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image.png\" alt=\"ventana aplicaci\u00f3n de chrome\" class=\"wp-image-17734\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image.png 556w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-300x142.png 300w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/figure>\n\n\n\n<p>Y en Firefox en la de almacenamiento:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"146\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png\" alt=\"ventana aplicaci\u00f3n de firefox\" class=\"wp-image-17735\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png 567w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-300x77.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure>\n\n\n\n<p>Desde esta interfaz puedes a\u00f1adir y quitar elementos de manera manual, pero vamos a ver qu\u00e9 m\u00e9todos tenemos para poder hacerlo desde el c\u00f3digo que lo que interesa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>M\u00e9todos del localStorage<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SetItem<\/strong>: con una clave y un valor los a\u00f1adir\u00e1 al storage o actualizar\u00e1 el valor si ya existe. <code>storage.setItem(clave, valor);<\/code><\/li>\n\n\n\n<li><strong>GetItem<\/strong>: se le pasa una clave, y devuelve el valor correspondiente si est\u00e1 presente en el storage. <code>var valor = storage.getItem(clave);<\/code><\/li>\n\n\n\n<li><strong>RemoveItem:<\/strong> elimina la clave que se le pasa como atributo. <code>storage.removeItem(clave);<\/code><\/li>\n\n\n\n<li><strong>Clear<\/strong>: limpia todo el localStorage. localStorage.clear();<\/li>\n\n\n\n<li><strong>Key<\/strong>: apunta al elemento en la posici\u00f3n, igual que si fuese un array.  <code>localStorage.key(i)<\/code><\/li>\n\n\n\n<li><strong>Length<\/strong>: devuelve el n\u00famero de datos almacenados en el localStorage. <code>localStorage.length<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00bfEs seguro el localStorage?<\/strong><\/h2>\n\n\n\n<p>Los datos en el localStorage <strong>no est\u00e1n cifrados<\/strong>, lo que significa que cualquier persona con acceso al navegador podr\u00eda ver y modificar esos datos almacenados si quisiera. Con un uso no adecuado, esto podr\u00eda exponer informaci\u00f3n personal que no queramos mostrar a otros. Adem\u00e1s, puede haber riesgo de inyecciones de c\u00f3digo (XSS &#8211; Cross-site scripting ).<\/p>\n\n\n\n<p>En cuanto a esto, tenemos algunas buenas pr\u00e1cticas que podemos usar para evitar este tipo de cosas como aplicar la Pol\u00edtica de seguridad de contenido (CSP) en el header, para restringir los or\u00edgenes y tipos de scripts que se pueden ejecutar en nuestra p\u00e1gina web. Y, por otro lado, evitar algunos m\u00e9todos de Javascript que permitan inyecciones de HTML, como veremos en el ejemplo enseguida.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Probando el LocalStorage<\/strong><\/h2>\n\n\n\n<p>Siempre y cuando tengas un dato en el localStorage, este ser\u00e1 compartido en el mismo origen (como hemos comentado en las ventajas respecto a las cookies).<\/p>\n\n\n\n<p>Hagamos la prueba, entra en la consola y escribe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>localStorage.setItem('mensaje', 'hola');<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"694\" height=\"159\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-2.png\" alt=\"prueba clave valor local storage\" class=\"wp-image-17753\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-2.png 694w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/image-2-300x69.png 300w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/figure>\n\n\n\n<p>Ve ahora a ver tu local storage, sal del navegador, o ci\u00e9rralo, reinicia ordenador, o abre otra pesta\u00f1a del mismo sitios, ver\u00e1s como el dato introducido persiste.<\/p>\n\n\n\n<p>Ejecuta esto en consola para verlo si no quieres entrar a buscar el almacenamiento:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>alert( localStorage.getItem('mensaje') );<\/code><\/pre>\n\n\n\n<p>El dominio, puerto y protocolo debe ser el mismo y obtendremos el valor del storage.<\/p>\n\n\n\n<p>Al igual que con los objetos, podemos acceder a localStorage como si fuera un objeto m\u00e1s, escribiendo:<\/p>\n\n\n\n<p><code>localStorage.laKeyDelObjeto<\/code>, el ejemplo anterior: <code>localStorage.mensaje= 'hola'<\/code><\/p>\n\n\n\n<p>y tambi\u00e9n <code>localStorage['mensaje']<\/code>.<\/p>\n\n\n\n<p>No obstante, se recomienda usar los m\u00e9todos propios del localStorage, por una raz\u00f3n principal, y es que un evento se dispara al utilizar estos m\u00e9todos, cosa que no ocurre, cuando usamos la forma de los objetos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Poner a prueba lo aprendido: Mini-proyecto<\/h2>\n\n\n\n<p>Vamos a hacer ahora <strong>un peque\u00f1o proyecto<\/strong> \u2013una Lista de tareas- donde poner en pr\u00e1ctica el localstorage y ver c\u00f3mo se comporta:<\/p>\n\n\n\n<p>Creamos un HTML sencillo con un input y un bot\u00f3n para enviar la tarea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;div id=\"app\"&gt;\n    &lt;input type=\"text\" id=\"taskInput\" placeholder=\"Agregar nueva tarea\" \/&gt;\n    &lt;button id=\"addButton\"&gt;Agregar Tarea&lt;\/button&gt;\n    &lt;ul id=\"taskList\"&gt;&lt;\/ul&gt;\n  &lt;\/div&gt;\n\n<\/code><\/pre>\n\n\n\n<p>Y ahora vamos a por el JavaScript:<\/p>\n\n\n\n<p>Primero cargar el JavaScript una vez el DOM se haya cargado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>document.addEventListener('DOMContentLoaded', function () {}<\/code><\/pre>\n\n\n\n<p>dentro vamos a <strong>identificar los elementos<\/strong> del DOM con los que vamos a interactuar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const taskInput = document.getElementById('taskInput');\nconst taskList = document.getElementById('taskList');\nconst addButton = document.getElementById('addButton');<\/code><\/pre>\n\n\n\n<p>vamos a<strong> a\u00f1adir un <code>addEventListener<\/code><\/strong> al bot\u00f3n para guardar el texto en las tareas si ya hemos escrito algo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>addButton.addEventListener('click', function () {\n        const taskText = taskInput.value.trim();\n\n        if (taskText !== '') {\n          const newTask = { text: taskText };\n          \/\/ funci\u00f3n para a\u00f1adir tarea a la lista\n          \/\/ funci\u00f3n para actualizar el localStorage\n          taskInput.value = '';\n        }\n      });\n<\/code><\/pre>\n\n\n\n<p>creamos las dos <strong>funciones para a\u00f1adir una tarea<\/strong> a la lista:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function addTaskToList(taskText) {\n          function addTaskToList(taskText) {\n          const taskItem = document.createElement(\"li\");\n          taskItem.className = \"taskItem\";\n\n          const taskSpan = document.createElement(\"span\");\n          taskSpan.textContent = taskText;\n          taskItem.appendChild(taskSpan);\n\n          const deleteButton = document.createElement(\"button\");\n          deleteButton.className = \"deleteButton\";\n          deleteButton.textContent = \"Eliminar\";\n          deleteButton.addEventListener(\"click\", function () {\n            taskItem.remove();\n            deleteTaskFromLocalStorage(taskText);\n          });\n          taskItem.appendChild(deleteButton);\n\n          taskList.appendChild(taskItem);\n        }\n        \n<\/code><\/pre>\n\n\n\n<p>Y nos quedar\u00eda a\u00f1adir una funci\u00f3n que a\u00f1ade la tarea, y otra que las elimine:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        \/\/ Funci\u00f3n para actualizar el almacenamiento local con las tareas actuales\n        function updateLocalStorage(newTask) {\n          const savedTasks = JSON.parse(localStorage.getItem(\"tasks\")) || &#91;];\n          const updatedTasks = &#91;...savedTasks, newTask];\n          localStorage.setItem(\"tasks\", JSON.stringify(updatedTasks));\n        }\n\n        \/\/ Funci\u00f3n para eliminar una tarea del almacenamiento local\n        function deleteTaskFromLocalStorage(taskText) {\n          const savedTasks = JSON.parse(localStorage.getItem(\"tasks\")) || &#91;];\n          const updatedTasks = savedTasks.filter((task) =&gt; task.text !== taskText);\n          localStorage.setItem(\"tasks\", JSON.stringify(updatedTasks));\n        }\n<\/code><\/pre>\n\n\n\n<p>Podr\u00edamos haber hecho la funci\u00f3n de a\u00f1adir la tarea usando el m\u00e9todo innerHTML de esta forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        const taskItem = document.createElement('li');\n        taskItem.className = 'taskItem';\n\n        taskItem.innerHTML = `\n          &lt;span&gt;${taskText}&lt;\/span&gt;\n          &lt;button class=\"deleteButton\"&gt;Eliminar&lt;\/button&gt;\n        `;\n\n        \/\/ Agregar evento para eliminar la tarea al hacer clic en el bot\u00f3n\n        const deleteButton = taskItem.querySelector('.deleteButton');\n        deleteButton.addEventListener('click', function () {\n          taskItem.remove();\n          deleteTaskFromLocalStorage(taskText);\n        });\n\n        taskList.appendChild(taskItem);\n      }\n\n<\/code><\/pre>\n\n\n\n<p>Pero, haz la prueba y ejecuta el c\u00f3digo entero cambiando esto, y prueba a introducir una tarea con c\u00f3digo HTML, ver\u00e1s qu\u00e9 sorpresa.<\/p>\n\n\n\n<style>\n   \n      #taskInput {\n        padding: 10px;\n        font-size: 16px;\n      }\n\n      #taskList {\n        list-style: none;\n        padding: 0;\n      }\n\n      .taskItem {\n        background-color: #fff;\n        margin: 5px 0;\n        padding: 10px;\n        border-radius: 5px;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n      }\n\n      .deleteButton {\n        background-color: #e74c3c;\n        color: #fff;\n        border: none;\n        padding: 5px 10px;\n        border-radius: 3px;\n        cursor: pointer;\n      }\n\n      #addButton {\n        background-color: #3498db;\n        color: #fff;\n        border: none;\n        padding: 10px;\n        border-radius: 5px;\n        cursor: pointer;\n      }\n    <\/style>\n\n<div id=\"app\">\n      <input type=\"text\" id=\"taskInput\" placeholder=\"Agregar nueva tarea\" \/>\n      <button id=\"addButton\">Agregar Tarea<\/button>\n      <ul id=\"taskList\"><\/ul>\n    <\/div>\n\n    <script>\n      document.addEventListener(\"DOMContentLoaded\", function () {\n        const taskInput = document.getElementById(\"taskInput\");\n        const taskList = document.getElementById(\"taskList\");\n        const addButton = document.getElementById(\"addButton\");\n\n        \/\/ Cargar tareas almacenadas en localStorage al cargar la p\u00e1gina\n        const savedTasks = JSON.parse(localStorage.getItem(\"tasks\")) || [];\n        savedTasks.forEach((task) => addTaskToList(task.text));\n\n        \/\/ Funci\u00f3n para agregar una tarea a la lista\n        function addTaskToList(taskText) {\n          const taskItem = document.createElement(\"li\");\n          taskItem.className = \"taskItem\";\n\n          const taskSpan = document.createElement(\"span\");\n          taskSpan.textContent = taskText;\n          taskItem.appendChild(taskSpan);\n\n          const deleteButton = document.createElement(\"button\");\n          deleteButton.className = \"deleteButton\";\n          deleteButton.textContent = \"Eliminar\";\n          deleteButton.addEventListener(\"click\", function () {\n            taskItem.remove();\n            deleteTaskFromLocalStorage(taskText);\n          });\n          taskItem.appendChild(deleteButton);\n\n          taskList.appendChild(taskItem);\n        }\n\n        \/\/ Evento para agregar una tarea al hacer clic en el bot\u00f3n\n        addButton.addEventListener(\"click\", function () {\n          const taskText = taskInput.value.trim();\n\n          if (taskText !== \"\") {\n            const newTask = { text: taskText };\n            addTaskToList(newTask.text);\n            updateLocalStorage(newTask);\n            taskInput.value = \"\";\n          }\n        });\n\n        \/\/ Funci\u00f3n para actualizar el almacenamiento local con las tareas actuales\n        function updateLocalStorage(newTask) {\n          const savedTasks = JSON.parse(localStorage.getItem(\"tasks\")) || [];\n          const updatedTasks = [...savedTasks, newTask];\n          localStorage.setItem(\"tasks\", JSON.stringify(updatedTasks));\n        }\n\n        \/\/ Funci\u00f3n para eliminar una tarea del almacenamiento local\n        function deleteTaskFromLocalStorage(taskText) {\n          const savedTasks = JSON.parse(localStorage.getItem(\"tasks\")) || [];\n          const updatedTasks = savedTasks.filter((task) => task.text !== taskText);\n          localStorage.setItem(\"tasks\", JSON.stringify(updatedTasks));\n        }\n      });\n    <\/script>\n\n\n\n<p>Aqu\u00ed acceso al c\u00f3digo completo en este Codepen:<\/p>\n\n\n\n<p class=\"codepen\" data-height=\"300\" data-default-tab=\"html,result\" data-slug-hash=\"GRejwxX\" data-user=\"David-Boo\" style=\"height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\">\n  <span>See the Pen <a href=\"https:\/\/codepen.io\/David-Boo\/pen\/GRejwxX\">\n  Local Storage<\/a> by David Boo (<a href=\"https:\/\/codepen.io\/David-Boo\">@David-Boo<\/a>)\n  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<\/span>\n<\/p>\n<script async src=\"https:\/\/cpwebassets.codepen.io\/assets\/embed\/ei.js\"><\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>En este art\u00edculo hemos visto c\u00f3mo utilizar el local storage y sus ventajas. Si no lo hab\u00edas usado nunca, esto proporciona nuevas posibilidades en cuanto a experiencia de usuario, por ejemplo, o en cuanto a funcionalidades en tu desarrollo y dise\u00f1o de tu proyecto web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El localStorage almacena los datos en la memoria del navegador de forma persistente, en este art\u00edculo se exploran sus caracter\u00edsticas, m\u00e9todos y se hace un peque\u00f1o proyecto para poner en pr\u00e1ctica lo aprendido. <\/p>\n","protected":false},"author":18,"featured_media":17744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[50],"tags":[],"class_list":["post-17733","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion-web"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u00bfQu\u00e9 es el LocalStorage? - Caronte Web Studio<\/title>\n<meta name=\"description\" content=\"Descubre el localStorage en el navegador: almacena datos de manera persistente y haz un peque\u00f1o proyecto con lo aprendido.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00bfQu\u00e9 es el LocalStorage? - Caronte Web Studio\" \/>\n<meta property=\"og:description\" content=\"Descubre el localStorage en el navegador: almacena datos de manera persistente y haz un peque\u00f1o proyecto con lo aprendido.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog de maketing | Caronte\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/carontewebstudio\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-12T12:03:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-29T11:28:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/explorando-local-storage.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1250\" \/>\n\t<meta property=\"og:image:height\" content=\"737\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David Boo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Boo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/\"},\"author\":{\"name\":\"David Boo\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/person\\\/b3de34e35d8ffffb7e620d1166ea5f52\"},\"headline\":\"Explorando el Local Storage: M\u00e9todos \u00datiles y Buenas Pr\u00e1cticas\",\"datePublished\":\"2024-01-12T12:03:00+00:00\",\"dateModified\":\"2024-01-29T11:28:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/\"},\"wordCount\":911,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/explorando-local-storage.jpg\",\"articleSection\":[\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/\",\"name\":\"\u00bfQu\u00e9 es el LocalStorage? - Caronte Web Studio\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/explorando-local-storage.jpg\",\"datePublished\":\"2024-01-12T12:03:00+00:00\",\"dateModified\":\"2024-01-29T11:28:51+00:00\",\"description\":\"Descubre el localStorage en el navegador: almacena datos de manera persistente y haz un peque\u00f1o proyecto con lo aprendido.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#primaryimage\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/explorando-local-storage.jpg\",\"contentUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/explorando-local-storage.jpg\",\"width\":1250,\"height\":737},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Explorando el Local Storage: M\u00e9todos \u00datiles y Buenas Pr\u00e1cticas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/\",\"name\":\"Blog de marketing | Caronte\",\"description\":\"En nuestro blog encontrar\u00e1s art\u00edculos semanales sobre SEO, marketing online, programaci\u00f3n web y mucho m\u00e1s.\",\"publisher\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#organization\",\"name\":\"Caronte - Agencia de marketing\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/caronte-agencia-de-marketing-logo.png\",\"contentUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/caronte-agencia-de-marketing-logo.png\",\"width\":1090,\"height\":155,\"caption\":\"Caronte - Agencia de marketing\"},\"image\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/carontewebstudio\\\/\",\"https:\\\/\\\/www.instagram.com\\\/caronte_studio\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@carontewebstudio\",\"https:\\\/\\\/www.youtube.com\\\/@carontewebstudio\",\"https:\\\/\\\/es.linkedin.com\\\/company\\\/carontewebstudio\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/person\\\/b3de34e35d8ffffb7e620d1166ea5f52\",\"name\":\"David Boo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/18a3ceeedb69fb45810646b329f07e0675f1e3b50d53fd3cb7522332f8c15ee9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/18a3ceeedb69fb45810646b329f07e0675f1e3b50d53fd3cb7522332f8c15ee9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/18a3ceeedb69fb45810646b329f07e0675f1e3b50d53fd3cb7522332f8c15ee9?s=96&d=mm&r=g\",\"caption\":\"David Boo\"},\"sameAs\":[\"http:\\\/\\\/carontestudio.com\"],\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/author\\\/david-boo\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00bfQu\u00e9 es el LocalStorage? - Caronte Web Studio","description":"Descubre el localStorage en el navegador: almacena datos de manera persistente y haz un peque\u00f1o proyecto con lo aprendido.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/","og_locale":"es_ES","og_type":"article","og_title":"\u00bfQu\u00e9 es el LocalStorage? - Caronte Web Studio","og_description":"Descubre el localStorage en el navegador: almacena datos de manera persistente y haz un peque\u00f1o proyecto con lo aprendido.","og_url":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/","og_site_name":"Blog de maketing | Caronte","article_publisher":"https:\/\/www.facebook.com\/carontewebstudio\/","article_published_time":"2024-01-12T12:03:00+00:00","article_modified_time":"2024-01-29T11:28:51+00:00","og_image":[{"width":1250,"height":737,"url":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/explorando-local-storage.jpg","type":"image\/jpeg"}],"author":"David Boo","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"David Boo","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#article","isPartOf":{"@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/"},"author":{"name":"David Boo","@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/person\/b3de34e35d8ffffb7e620d1166ea5f52"},"headline":"Explorando el Local Storage: M\u00e9todos \u00datiles y Buenas Pr\u00e1cticas","datePublished":"2024-01-12T12:03:00+00:00","dateModified":"2024-01-29T11:28:51+00:00","mainEntityOfPage":{"@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/"},"wordCount":911,"commentCount":0,"publisher":{"@id":"https:\/\/carontestudio.com\/blog\/#organization"},"image":{"@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#primaryimage"},"thumbnailUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/explorando-local-storage.jpg","articleSection":["Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/","url":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/","name":"\u00bfQu\u00e9 es el LocalStorage? - Caronte Web Studio","isPartOf":{"@id":"https:\/\/carontestudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#primaryimage"},"image":{"@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#primaryimage"},"thumbnailUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/explorando-local-storage.jpg","datePublished":"2024-01-12T12:03:00+00:00","dateModified":"2024-01-29T11:28:51+00:00","description":"Descubre el localStorage en el navegador: almacena datos de manera persistente y haz un peque\u00f1o proyecto con lo aprendido.","breadcrumb":{"@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#primaryimage","url":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/explorando-local-storage.jpg","contentUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2024\/01\/explorando-local-storage.jpg","width":1250,"height":737},{"@type":"BreadcrumbList","@id":"https:\/\/carontestudio.com\/blog\/explorando-el-local-storage-metodos-utiles-y-buenas-practicas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/carontestudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Explorando el Local Storage: M\u00e9todos \u00datiles y Buenas Pr\u00e1cticas"}]},{"@type":"WebSite","@id":"https:\/\/carontestudio.com\/blog\/#website","url":"https:\/\/carontestudio.com\/blog\/","name":"Blog de marketing | Caronte","description":"En nuestro blog encontrar\u00e1s art\u00edculos semanales sobre SEO, marketing online, programaci\u00f3n web y mucho m\u00e1s.","publisher":{"@id":"https:\/\/carontestudio.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/carontestudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/carontestudio.com\/blog\/#organization","name":"Caronte - Agencia de marketing","url":"https:\/\/carontestudio.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/06\/caronte-agencia-de-marketing-logo.png","contentUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/06\/caronte-agencia-de-marketing-logo.png","width":1090,"height":155,"caption":"Caronte - Agencia de marketing"},"image":{"@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/carontewebstudio\/","https:\/\/www.instagram.com\/caronte_studio\/","https:\/\/www.tiktok.com\/@carontewebstudio","https:\/\/www.youtube.com\/@carontewebstudio","https:\/\/es.linkedin.com\/company\/carontewebstudio"]},{"@type":"Person","@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/person\/b3de34e35d8ffffb7e620d1166ea5f52","name":"David Boo","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/18a3ceeedb69fb45810646b329f07e0675f1e3b50d53fd3cb7522332f8c15ee9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/18a3ceeedb69fb45810646b329f07e0675f1e3b50d53fd3cb7522332f8c15ee9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/18a3ceeedb69fb45810646b329f07e0675f1e3b50d53fd3cb7522332f8c15ee9?s=96&d=mm&r=g","caption":"David Boo"},"sameAs":["http:\/\/carontestudio.com"],"url":"https:\/\/carontestudio.com\/blog\/author\/david-boo\/"}]}},"_links":{"self":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts\/17733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/comments?post=17733"}],"version-history":[{"count":25,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts\/17733\/revisions"}],"predecessor-version":[{"id":18386,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts\/17733\/revisions\/18386"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/media\/17744"}],"wp:attachment":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/media?parent=17733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/categories?post=17733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/tags?post=17733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}