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

获取JavaScript嵌套数组对象值异常:output._result[0].title返回undefined的原因

为什么能拿到对象但访问属性返回undefined?

这种情况我之前排查过好几次,大概率是下面几个原因导致的,咱们一步步来分析:

1. 属性名藏了不可见的特殊字符

看起来你看到的是"title",但实际这个属性名可能带了空格、全角空格或者零宽空格这类肉眼难辨的字符。比如实际键名是" title"(前面多了空格)或者"title\u200B"(零宽空格),这时候用"title"自然访问不到。

你可以用这些代码验证:

// 打印所有可枚举的属性名,看看实际键是什么
console.log(Object.keys(output._result[0]));
// 遍历所有属性,直接输出键和对应的值
for (const key in output._result[0]) {
  console.log(`实际键名:"${key}",对应值:${output._result[0][key]}`);
}

如果输出的键名和你以为的"title"不一样,比如多了空格,那就是这个问题了。

2. 对象是Proxy代理实例

如果这个output._result[0]是通过Proxy创建的代理对象,控制台显示的内容可能是代理的get陷阱返回的“展示用”数据,但实际访问title属性时,代理的逻辑没有正确返回对应的值,导致返回undefined。

你可以用这段代码判断是不是Proxy:

console.log(output._result[0] instanceof Proxy);
// 或者查看属性的描述符,看看实际有没有这个属性
console.log(Object.getOwnPropertyDescriptors(output._result[0]));

3. 控制台显示的是对象快照而非实时状态

浏览器控制台有时候会延迟解析对象,你看到的output._result[0]的内容可能是后续才赋值的,但你访问title的时候,这个属性还没被设置。这种情况比较少见,但可以用JSON序列化来验证:

console.log(JSON.stringify(output._result[0]));

如果序列化后的字符串里没有"title"字段,那说明控制台显示的是旧的快照,实际对象当时还没有这个属性。

4. 属性是Symbol类型的键

虽然控制台显示的是"title",但实际这个属性的键是一个Symbol而不是字符串。这时候用字符串"title"访问肯定拿不到值。你可以用这段代码查看有没有Symbol键:

console.log(Object.getOwnPropertySymbols(output._result[0]));

如果输出里有Symbol,试试用这个Symbol去访问属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:53:41