You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

非空判断内仍触发JSON.parse(null)报错,代码问题排查求助

问题分析与解决方案

你的问题出在判断条件只检查了localStorage.getItem("test")是否为null,但没有考虑到这个返回值可能是能被JSON.parse解析成null的字符串(比如"null"),或者是无效的JSON内容,这些情况都会让你的条件通过,但执行后续代码时触发报错。

具体错误场景拆解

  1. localStorage.getItem("test")返回字符串"null"
    你的判断!= null会成立(因为"null"是字符串类型,不是null值),此时JSON.parse("null")会返回null。虽然JSON.stringify(null)是合法操作(结果为"null"),但如果你的运行环境中localStorage处于不可写入状态(比如部分浏览器的隐私模式),调用setItem就会抛出InvalidStateError。同时,后续如果有依赖解析后值的代码,也会因为值为null而报错。

  2. getItem返回空字符串或无效JSON时
    空字符串""不等于null,所以条件依然成立,但JSON.parse("")会直接抛出JSON语法错误;如果是无效JSON(比如"{invalid}"),同样会触发解析错误。

修复后的代码示例

const testValue = window.localStorage.getItem("test");
// 先排除null、空字符串的情况
if (testValue != null && testValue.trim() !== "") {
  try {
    const parsedValue = JSON.parse(testValue);
    // 如果你想排除解析后为null的场景,再加这层判断
    if (parsedValue !== null) {
      window.localStorage.setItem("test", JSON.stringify(parsedValue));
    }
  } catch (error) {
    console.error("处理localStorage的test值时出错:", error);
    // 可选:遇到无效JSON时清理错误数据
    // window.localStorage.removeItem("test");
  }
}

关键改进点

  • 增加空字符串检查:避免解析空内容导致的语法错误;
  • try/catch包裹JSON解析:捕获无效JSON的情况,防止脚本崩溃;
  • 可选的解析后值判断:如果你的业务逻辑要求解析后的值不能是null,可以加上parsedValue !== null的判断,彻底避免你遇到的场景。

内容的提问来源于stack exchange,提问作者frosty

火山引擎 最新活动