Tengo un token almacenado en localStorage , también tengo un método que verifica si el token es correcto o no, como puedes ver en este código:
let token = localStorage.getItem('token'); console.log(token); if ( !token ) { return null; } const parts = token.split('.'); if ( parts.length !== 3 ) { throw new Error('error'); } .... si el token no está undefined , devolveré nulo, de lo contrario, continúe con la verificación.
Hay dos problemas que no puedo entender:
if ( !token ) devuelve falso cuando el token no está undefined , el primer console.log devuelve indefinido, pero mi método continúa const parts = token.split('.'); .El almacenamiento local funciona solo con cadenas.
MDN: Ventana.almacenamiento local
Las claves y los valores almacenados con localStorage siempre están en formato UTF-16 DOMString, que utiliza dos bytes por carácter. Al igual que con los objetos, las claves enteras se convierten automáticamente en cadenas.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Entonces, cada valor se serializa como una cadena.
localStorage.setItem('token', undefined); let token = localStorage.getItem('token'); console.log(token); console.log(typeof(token));Imprime en la consola:
undefined stringConclusiones :
null e undefined en Almacenamiento local.string .Notas:
false de forma predeterminada. Y solo en caso de éxito debería devolver true .