Tengo un elemento de LocalStorage que estoy analizando en una variable como esta:
let resp = JSON.parse(localStorage.getItem('someKey'));
A veces, el problema es que localStorage puede no tener el valor y puede devolver un objeto indefinido para analizar, lo que da como resultado el siguiente error:
SyntaxError: Unexpected token U in JSON at position 0
He intentado esto:
let resp = localStorage.getItem('someKey') ? JSON.parse(localStorage.getItem('someKey')) : null;
Pero creo que esta no es una forma muy óptima de manejar esto, cualquier sugerencia es bienvenida.
tu solución está bien, si quieres que sea más corta, puedes probar esto
let resp = JSON.parse(localStorage.getItem('someKey') || null)
Así es como funciona:
localStorage.getItem('someKey') || null
evaluará primero el lado izquierdo del código, si localStorage.getItem('someKey')
devuelve una cadena undefined
o ''
vacía, devolverá el código del lado derecho que es null
Luego, JSON.parse(null)
devolverá null
en lugar de error
Podrías intentar algo como esto:
let resp = null; const storedResp = localStorage.getItem('someKey'); if (storedResp) { try { resp = JSON.parse(storedResp); } catch (e) {} }
Esto no debería generar ningún error, ya que solo lo analiza en JSON si existe, y luego detecta cualquier error si falla el análisis de JSON. Te quedas con resp
igual a null
o los datos almacenados como JSON, sin errores en ningún caso.
Como han dicho otros, su solución actual está bien, pero hay dos problemas potenciales con ella tal como está escrito:
localStorage
dos veces, lo que puede ser innecesariamente lento si se trata de un objeto grande.