You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript读取sessionStorage时try...catch的优雅返回实现方案

方案对比结论

最优实践为方案3,是三者中唯一同时满足「无重复return null」「逻辑覆盖完整」「符合代码规范」的实现。


各方案优劣分析

  • 方案1:存在明显的冗余代码,try块内window不存在时的return null和catch块的return null重复,完全不符合你要避免重复书写兜底返回的需求。
  • 方案2:缺少window存在性判断,虽然异常也会被catch兜底返回null,但在SSR(服务端渲染)等非浏览器环境下会触发不必要的异常抛出,逻辑严谨性不足,性能也略逊。
  • 方案3:优势如下:
    1. 只有末尾一处return null,完全满足优雅兜底、无重复返回语句的要求
    2. 逻辑覆盖全场景:
      • 非浏览器环境(window未定义):不进入if分支,try块正常执行结束后走到末尾返回null
      • 浏览器环境触发DOMException(比如用户禁用存储、跨域限制等):异常被catch捕获,无额外操作直接走到末尾返回null
      • 正常访问场景:直接返回解析后的存储值
    3. 非浏览器环境提前判断逻辑,不会触发不必要的异常捕获开销,性能更优

更严谨的优化版本

可以在方案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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:09:03