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

如何修复Uncaught TypeError: budgetArray.push is not a function错误?

问题原因

报错核心是budgetArray并非数组类型——从localStorage读取并解析后的值可能是单个对象、null,或是格式错误的JSON解析结果,这类值没有push方法,因此触发TypeError。直接设为[]时是数组,能正常调用push,但会丢失历史数据。

修复方案

1. 初始化时强制保证数组类型

解析后立即校验类型,非数组则重置为空数组,同时添加异常捕获处理非法JSON:

const STORAGE_KEY = 'your-storage-key'; // 替换为你的实际存储键名
let budgetArray = [];

try {
  const storedData = window.localStorage.getItem(STORAGE_KEY);
  if (storedData) {
    const parsedData = JSON.parse(storedData);
    // 仅当解析结果是数组时才使用,否则重置为空数组
    budgetArray = Array.isArray(parsedData) ? parsedData : [];
  }
} catch (error) {
  console.error('读取预算数据失败:', error);
  // 解析出错时保持空数组,避免后续逻辑崩溃
}

2. 修正存储逻辑(storedEntry函数)

确保存储的是完整数组,而非单个预算对象。如果之前的storedEntry直接存储单个对象,会导致下次读取时得到对象而非数组,需修改为:

function storedEntry(newBudget) {
  // 先按正确方式读取当前数组
  let budgetArray = [];
  try {
    const storedData = window.localStorage.getItem(STORAGE_KEY);
    if (storedData) {
      const parsedData = JSON.parse(storedData);
      budgetArray = Array.isArray(parsedData) ? parsedData : [];
    }
  } catch (error) {
    console.error('读取历史数据失败:', error);
  }

  // 添加新预算并重新存储整个数组
  budgetArray.push(newBudget);
  window.localStorage.setItem(STORAGE_KEY, JSON.stringify(budgetArray));
}

3. 临时清理错误历史数据

如果localStorage中已存储非数组格式的数据,可在浏览器控制台执行以下代码清空错误数据(执行一次即可):

localStorage.removeItem('your-storage-key'); // 替换为你的实际存储键名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:09:14