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

React JSX遍历数据遇字段缺失报错,需用0替代undefined显示

解决React遍历中「Cannot read property size of undefined」的问题

看起来你遇到的坑是遍历数据时,要么数组里混着undefined的元素,要么部分Item本身没有size字段——直接访问item.size或者简单的三元判断都会触发报错,核心原因是:当item本身是undefined时,你连它的size属性都没法读取,更别说做判断了。

我给你几个实用的解决方案,按推荐程度排序:

1. 可选链+空值合并(最简洁现代的写法)

ES2020之后的语法,React项目完全支持,一步到位解决问题:

{item?.size ?? "0"}
  • item?.size:先检查item是否存在(不是undefined或null),如果不存在直接返回undefined,不会抛出报错;如果存在,正常读取size字段。
  • ?? "0":如果左边结果是undefined或null,就显示"0",否则显示size的实际值。
    这个写法还能完美处理size=0或空字符串这类你想正常显示的falsy值,比简单三元判断更精准。

2. 兼容旧环境的嵌套判断

如果你的项目还不能用ES2020语法,可以用嵌套条件先确保item有效:

{item && typeof item.size !== "undefined" ? item.size : "0"}

先判断item是否存在,再精确检查size字段是否定义——避免把size=0这种合法值误判为"不存在"。如果业务里size不可能是0或空字符串,也可以简化成:

{item && item.size ? item.size : "0"}

3. 先过滤无效元素再遍历

如果数组里确实混着undefined的元素,建议从源头过滤掉,后续遍历更省心:

{items.filter(item => item != null).map(item => (
  <div key={item.color}>{item.size ?? "0"}</div>
))}

filter(item => item != null)会把数组里的undefined和null全部过滤掉,后续就不用再担心item不存在的问题了。

为什么你之前的写法会报错?

你用的{item.size ? "itWorks" : "0"},当item本身是undefined时,JavaScript会直接抛出「Cannot read property size of undefined」错误——因为你连item都没有,根本没法读取它的size属性。必须先确保item存在,才能去访问它的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:59