JavaScript处理JSON小数做气候分区时出现undefined/NaN问题
问题根因
报错的核心原因是字段拼写不匹配:
你提供的JSON文件中,annual_average节点下的温度字段被错写为tempertur,但代码中读取的是temperature。读取对象不存在的属性时,JavaScript会返回undefined,undefined和任意数值做大小比较结果都为false,导致所有判断分支都没有触发,k1始终未被赋值,最终输出undefined。
另外你给出的测试数据中年均降水量为880,远大于250,所以第一个判断precipitation < 250也不会触发。
修复方案
你可以二选一即可:
- 修改JSON文件的字段拼写
将JSON中annual_average的温度字段改为和其他月份一致的拼写:
"annual_average": { "temperature": 15.5, "precipitation": 880 }
修改后原有代码可直接正常运行,最终输出结果为A。
- 调整代码适配现有JSON
如果JSON文件不可修改,把代码中所有读取annual_average.temperature的位置改为annual_average.tempertur即可,参考修改后的代码:
const data = require("./data.json"); let k1; if (data.tabel[0].annual_average.precipitation < 250) { k1 = "B"; } else if (data.tabel[0].annual_average.tempertur > 15) { k1 = "A"; } else if (data.tabel[0].annual_average.tempertur > 12) { k1 = "C"; } else if (data.tabel[0].annual_average.tempertur > 0) { k1 = "D"; } else if (data.tabel[0].annual_average.tempertur > -10) { k1 = "E"; } else { k1 = "F"; } console.log(k1);
建议额外增加最后的兜底else分支,避免极端边界情况出现未赋值的问题。
内容的提问来源于stack exchange,提问作者Spatzl HD
相关产品推荐
相关产品推荐

