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

如何从字符串中获取JavaScript对象?LocalStorage工具问题求助

解决LocalStorage获取截断JSON字符串的问题

首先得说,你现在遇到的核心问题是用eval()解析不完整的JSON字符串会直接报错,而且eval本身也存在安全风险(如果存储的内容被篡改,可能执行恶意代码)。另外你的代码里还有个小拼写错误:lenght应该是length,这个也得修正。

正确的处理思路

要安全可靠地把字符串转为JS对象,应该用JSON.parse()替代eval,同时加上try-catch块来捕获解析失败的情况——比如遇到截断的字符串(像你说的"Ja")时,不会直接崩溃,而是可以做友好处理。

修改后的代码示例

function fnGet(name) {
  const storage = window.localStorage;
  const getVal = storage.getItem(name);
  
  if (getVal === null) {
    console.log(`The localStorage doesn't have the item: ${name}`);
    return null; // 这里建议返回null而不是只打日志,调用方更易处理
  }

  // 拆分数据和时间戳(忽略时间戳部分)
  const dataStr = getVal.split(':-:')[0];
  
  try {
    // 尝试解析为JSON对象
    return JSON.parse(dataStr);
  } catch (error) {
    // 解析失败,说明不是有效的JSON,返回原始字符串
    console.warn(`Failed to parse ${name} as JSON, returning raw string:`, error);
    return dataStr;
  }
}

关键改进点

  • 替换eval为JSON.parse:JSON.parse是专门用来解析JSON字符串的API,比eval更安全,而且只会解析合法的JSON,不会执行任意代码。
  • 添加try-catch捕获解析错误:当遇到截断的字符串(比如"Ja")时,解析会抛出错误,这时候我们可以捕获错误,返回原始字符串或者给出提示,避免程序崩溃。
  • 修正拼写错误:把lenght改成length,否则判断拆分后的数组长度会出错。
  • 返回值更明确:当找不到对应项时,返回null让调用方可以做后续处理,而不是只打印日志。

这样修改后,不管存储的是完整的JSON对象、普通字符串,还是截断的不完整JSON,都能正常处理,不会出现无法获取的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:22:09