调用返回JSON数组的API遇空值报错:无法读取null的'name'属性
问题根源分析
你遇到的报错「Cannot read property 'name' of null」,核心原因是你先尝试访问了element.fields.resolution.name,但此时element.fields.resolution本身就是null——null没有任何属性,所以在你执行判断逻辑之前,就已经触发了报错,你的空值处理逻辑根本没机会执行。
解决方案
这里有几种简洁且安全的处理方式,根据你的环境选择:
1. 使用ES2020+可选链+空值合并运算符(推荐)
这是最简洁的现代写法,能同时处理resolution为null或undefined的情况:
let comArr = []; JSONData.issues.forEach(element => { comArr.push({ Resolution: element.fields.resolution?.name ?? "some default value" }); });
?.可选链操作符:如果resolution是null/undefined,会直接返回undefined,不会继续访问name,避免报错??空值合并运算符:只有当左边的值是null或undefined时,才会使用右边的默认值
2. 兼容旧环境的嵌套条件判断
如果你的运行环境不支持ES2020语法,就用传统的条件判断先检查resolution:
let comArr = []; JSONData.issues.forEach(element => { let resolutionName = "some default value"; // 先确认resolution存在,再检查name是否有效 if (element.fields.resolution && element.fields.resolution.name !== null) { resolutionName = element.fields.resolution.name; } comArr.push({ Resolution: resolutionName }); });
也可以用调整顺序的三元运算符:
let comArr = []; JSONData.issues.forEach(element => { comArr.push({ Resolution: element.fields.resolution === null ? "some default value" : (element.fields.resolution.name ?? "some default value") }); });
额外提醒
如果API返回的element.fields也有可能为null,那你需要再多加一层判断,比如:
Resolution: element.fields?.resolution?.name ?? "some default value"
这样能彻底避免所有嵌套属性的访问报错。
内容的提问来源于stack exchange,提问作者Exc




