如何解决JavaScript中push调用相关的Uncaught TypeError报错?
分析与解决办法
咱们一步步拆解你遇到的问题,先把两个报错的根源理清楚:
1. 两个报错的具体原因
「Cannot read property 'push' of undefined」
你初始化了item_data = [],这是一个空数组。当你访问item_data[index](index=0)时,这个位置还没有任何元素,所以它的值是undefined。你没法对undefined调用push方法,这就是第一个报错的由来。
「Uncaught TypeError: item_data[index].push is not a function」
这个报错有两个核心诱因:
- 你可能后来给
item_data[index]赋值了一个非数组类型的值(比如直接塞了一个对象),这时候它自然没有push方法; - 你的
JSON.parse用法完全错误:JSON.parse的参数必须是JSON格式的字符串,但你传的是一个JS数组[{"A":"0","B":"100","C":"0","D":"0"}],这会导致JSON.parse抛出错误,后续的data值异常,进而引发连锁问题。
2. 具体解决步骤
第一步:修正JSON.parse的使用
如果你的数据已经是JS对象/数组(比如你写的[{"A":"0"...}]),完全不需要用JSON.parse,直接赋值即可:
// 单个对象的情况 var data = {"A":"0","B":"100","C":"0","D":"0"}; // 或者数组的情况 var data = [{"A":"0","B":"100","C":"0","D":"0"}];
如果你的数据确实来自JSON字符串(比如后端返回的),那要把它转成字符串格式再解析:
// 注意外层的单引号,把对象数组转成合法的JSON字符串 var data = JSON.parse('[{"A":"0","B":"100","C":"0","D":"0"}]');
第二步:确保item_data[index]是数组
在调用push之前,先初始化item_data[index]为数组(如果它还不存在的话):
var item_data = []; var index = 0; // 直接使用JS对象,无需JSON.parse var data = {"A":"0","B":"100","C":"0","D":"0"}; // 先检查item_data[index]是否为数组,不是则初始化 if (!Array.isArray(item_data[index])) { item_data[index] = []; } // 现在可以安全地push数据了 item_data[index].push(data); console.log(item_data); // 输出结果:[ [ { A: '0', B: '100', C: '0', D: '0' } ] ]
额外说明
你引入的jQuery库在这段代码里并没有被用到,所以如果只是这段逻辑的话,可以去掉;如果后续有jQuery相关操作,保留没问题——这个报错和jQuery完全无关。
内容的提问来源于stack exchange,提问作者shah rushabh
相关产品推荐
相关产品推荐

