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

在jQuery中访问JSON对象时遇obj[i]未定义错误的排查

问题分析与解决方案

嘿,我一眼就看到问题啦!你遇到的obj[i] is undefined错误,根源在于对象的键名和循环索引不匹配,还有JavaScript对象属性访问的小细节,咱们一步步拆解:

核心问题

你的JSON对象解析后是这样的:

{
  "1": { "name":"temporary", "value":"5" },
  "2": { "name":"temporary 2", "value":"10" }
}

这里的键是字符串类型的"1"和"2",而你的循环是从i=0开始的:

for(var i = 0; i < count; i++){
  console.log(obj[i].name + ": " + obj[i].value);
}

第一次循环时i=0,你访问的是obj[0],但你的对象里根本没有"0"这个键,自然就会返回undefined,调用undefined.name就直接报错了。

至于你说之前这个写法管用,大概率是之前的对象键是从0开始的数字字符串(比如"0"、"1"),或者你处理的是数组而非对象——数组的索引才是从0开始的连续数字,直接用i访问没问题。

修复方案

给你三种靠谱的解决办法,按需选择:

1. 遍历对象的键数组(最推荐)

用Object.keys()获取对象所有键的数组,然后通过键来访问对应属性,不管键是什么格式都能兼容:

var obj = JSON.parse(StringObj);
var keys = Object.keys(obj);
for(var i = 0; i < keys.length; i++){
  var key = keys[i];
  console.log(obj[key].name + ": " + obj[key].value);
}

2. 使用for...in循环

如果要直接遍历对象的属性,记得加上hasOwnProperty判断,避免遍历到原型链上的继承属性:

var obj = JSON.parse(StringObj);
for(var key in obj){
  // 确保只遍历对象自身的属性
  if(obj.hasOwnProperty(key)){
    console.log(obj[key].name + ": " + obj[key].value);
  }
}

3. 把结构改成数组(如果后端可调整)

如果能修改动态生成JSON的程序,把结构改成数组会更符合你之前的遍历习惯:

[
  {"name":"temporary", "value":"5"},
  {"name":"temporary 2", "value":"10"}
]

这样解析后直接用你原来的循环代码就能正常运行了,数组的索引天然是从0开始的连续数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:34