JavaScript读取sessionStorage时try...catch的优雅返回实现方案
方案对比结论
最优实践为方案3,是三者中唯一同时满足「无重复return null」「逻辑覆盖完整」「符合代码规范」的实现。
各方案优劣分析
- 方案1:存在明显的冗余代码,try块内
window不存在时的return null和catch块的return null重复,完全不符合你要避免重复书写兜底返回的需求。 - 方案2:缺少
window存在性判断,虽然异常也会被catch兜底返回null,但在SSR(服务端渲染)等非浏览器环境下会触发不必要的异常抛出,逻辑严谨性不足,性能也略逊。 - 方案3:优势如下:
- 只有末尾一处
return null,完全满足优雅兜底、无重复返回语句的要求 - 逻辑覆盖全场景:
- 非浏览器环境(window未定义):不进入if分支,try块正常执行结束后走到末尾返回null
- 浏览器环境触发DOMException(比如用户禁用存储、跨域限制等):异常被catch捕获,无额外操作直接走到末尾返回null
- 正常访问场景:直接返回解析后的存储值
- 非浏览器环境提前判断逻辑,不会触发不必要的异常捕获开销,性能更优
- 只有末尾一处
更严谨的优化版本
可以在方案3的基础上补充边界处理,避免存储值为空字符串时JSON.parse抛异常,同时可新增异常上报逻辑便于排查问题:
function readSessionStorage(key) { try { if (typeof window !== 'undefined') { const rawValue = window.sessionStorage.getItem(key); return rawValue ? JSON.parse(rawValue) : null; } } catch (err) { // 此处可根据业务需要新增异常上报逻辑 console.error('read sessionStorage failed', err); } return null; }
内容的提问来源于stack exchange,提问作者Dhaval Jardosh
相关产品推荐
相关产品推荐

