Manera elegante de devolver nulo. No quiero devolverlo dos veces.
Opción 1:
function readSessionStorage(key) { try { if (typeof window !== 'undefined') { return JSON.parse(window.sessionStorage.getItem(key)); } return null; } catch { return null; } }Opcion 2:
function readSessionStorage(key) { try { return JSON.parse(window.sessionStorage.getItem(key)); } catch { return null; } }Opción 3: Si elegimos esta opción, ¿por qué deberíamos hacer esto?
function readSessionStorage(key) { try { if (typeof window !== 'undefined') { return JSON.parse(window.sessionStorage.getItem(key)); } } catch {} return null; }¿Por qué necesito hacer esto?
Recibo DOMException si trato de obtener window.sessionStorage y, por lo tanto, necesito usar try...catch .
function readSessionStorage(key) { if (typeof window !== 'undefined' || !window.sessionStorage) { return JSON.parse(window.sessionStorage.getItem(key)); } return null; }Código original:
function readSessionStorage(key) { if (typeof window !== 'undefined') { return JSON.parse(window.sessionStorage.getItem(key)); } return null; }Bueno, eso es extraño. ¿Sin respuesta en siete meses? Bueno, yo mismo estaba buscando algo como esto y no pude encontrar una solución elocuente. Creé el mío propio.
Editar : después de más trabajo, ¡descubrí que los operadores de seguridad nula existen en JS! ¡Hurra! La siguiente función sigue siendo bastante útil, quizás más ahora, ya que uno puede usar el operador de seguridad para obtener el valor preciso deseado y luego manejarlo correctamente.
Considere usar una función similar a esta:
const defineCheck = (item, defaultVal = '') => { try { return (item !== null && item !== undefined) ? item : defaultVal; } catch { return defaultVal; } }Es posible que esto no se ajuste exactamente a sus necesidades, pero puede hacer su función como lo desee. Esto mantendrá el desorden fuera de su negocio importante o de la lógica de la interfaz de usuario, para que usted y los demás puedan concentrarse en lo que es importante.
Ejemplo de uso (si se sabe que la cuenta tiene un valor esperado):
tempForm.ExpirationDate = defineCheck(account.expirationDate); tempForm.LicenseType = defineCheck(account.licenseType, 'Nada');Con seguridad nula:
tempForm.ExpirationDate = defineCheck(account?.license?.expireDate); tempForm.LicenseType = defineCheck(account?.license?.licenseType, 'Nada'); Espero que usted y otros encuentren esto útil, o mejor aún, compartan una forma mucho mejor de lidiar con este problema. Esperaba que el operador de verificación de seguridad nula de C# llegara a JS, pero no hubo suerte (p. ej., "¿cuenta?.licencia?.licenseType ?? 'Nada'")