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

如何避免访问空数组内嵌套数据时报错,且嵌套存在时可正常取值?

报错原因

你当前的可选链用法不完整:只在houses后加了可选链,当houses?.[0]返回undefined后,代码依然会尝试读取undefined.person,所以会抛出错误。可选链只会对紧邻的属性访问做安全拦截,不会自动处理后续的链式调用。

解决方法

在数组下标访问后也补充可选链即可,完整代码如下:

var data = {
  city: {
    street: {
      houses: []
    }
  }
}

alert(data.city.street.houses?.[0]?.person);

修改后只要链式访问中任意一个节点不存在,整个表达式就会直接返回undefined,不会抛出报错,符合你要的效果。

如果运行环境不支持ES2020的可选链语法,也可以用逻辑与的兼容写法实现同样效果:

alert(data && data.city && data.city.street && data.city.street.houses && data.city.street.houses[0] && data.city.street.houses[0].person);

补充说明:如果修改可选链写法后依然报错,请确认运行环境是否支持ES2020及以上语法,低版本运行环境可以使用上面的逻辑与兼容写法,或者通过Babel转译代码适配低版本环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:45:03