En algunos casos, necesito almacenar información en localStorage de que algunos 'objetos' son nulos. Pero no soporta eso.
localStorage.setItem('tt', null); const tt = localStorage.getItem('tt'); console.log(tt.length); console.log(`tt is ${tt == null ? '' : 'NOT '}null`);este código pone en la consola:
4 tt is NOT null¿Por qué?
Puedo ajustar mi lógica y evitar guardar objetos nulos en el almacenamiento, pero en algunas circunstancias, desea diferenciar los datos "el valor del objeto es desconocido" frente a "el valor del objeto es nulo".
¿Debería usar otra variable para eso?
Según la documentación , el valor de retorno de getItem es un DomString
A DOMString containing the value of the key. If the key does not exist, null is returned.
Si desea decir nulo, deberá usar JSON.stringify y JSON.parse
localStorage.setItem('tt', JSON.stringify(null)); const tt = JSON.parse(localStorage.getItem('tt')); console.log(`tt is ${tt == null ? '' : 'NOT '}null`);según la documentación, setItem recibe el DOMString que convierte nulo en cadena "null". Es por eso que cuando guarda nulo obtiene la longitud 4.
https://developer.mozilla.org/en-US/docs/Web/API/DOMString
Ciertas API web que aceptan un DOMString tienen un comportamiento heredado adicional, en el que pasar una cadena nula se convierte en la cadena vacía en lugar del "nulo" habitual.
Si desea establecer un valor nulo, usaría removeItem ("tt") para obtener un valor nulo.
localStorage solo puede almacenar pares de clave/valor de cadena; por lo tanto, null se convertirá en forma de cadena ( 'null' ) cuando configure el elemento en localStorage .
El uso de una verificación de tipo estricta cuando se compara con null resolverá el problema:
localStorage.setItem('tt', null); const tt = localStorage.getItem('tt'); console.log(`tt is ${tt === null ? '' : 'NOT '}null`); Alternativamente, puede usar el operador in para verificar si la clave existe:
console.log(`tt is ${'tt' in localStorage ? 'NOT' : ''} null`);