JavaScript中如何检查数组为undefined并返回对应错误信息?
报错原因
你遇到的TypeError: Cannot read properties of undefined (reading 'release_dates')是因为Array.find()在没有匹配到符合条件的元素时会返回undefined,当movieRating里不存在iso_3166_1 === 'US'的条目时,findUSRating值为undefined,直接访问它的release_dates属性就会触发报错。
除此之外你的代码还有两个问题:
- 没有对
rating.results、findUSRating.release_dates这类可能为undefined的属性做空值兜底,任意一个字段缺失都会触发同类报错 - 三元判断里的
array[index]属于无效判断,代码中从未定义过index变量,属于冗余逻辑
修复后代码
在每一步可能返回空值的链路加默认兜底即可,不需要额外的复杂判断:
// 给results加空数组兜底,避免results不存在时调用find方法报错 const movieRating = rating.results ?? []; // 匹配US地区分级条目,匹配不到时用空对象兜底 const findUSRating = movieRating.find((item) => item.iso_3166_1 === 'US') ?? {}; // 给release_dates加空数组兜底,过滤掉certification为空的无效条目 const validCertifications = (findUSRating.release_dates ?? []).filter((item) => item.certification); // 有效分级数组长度大于0时取第一个分级,否则返回指定错误提示 console.log( validCertifications.length ? validCertifications[0].certification : "No Certification Available For This Movie" );
说明
代码中使用的??是空值合并运算符,仅在左侧值为null或undefined时触发右侧的默认值,不会误把0、空字符串这类合法假值判定为需要兜底的场景。如果需要兼容IE等不支持??的老旧环境,可以把所有??替换为||实现相同效果。
内容的提问来源于stack exchange,提问作者trevinshu
相关产品推荐
相关产品推荐

