为什么这个检查抛出错误,即使我事先检查了它是否未定义

Why is this check throwing an error, even if I check whether it’s undefined beforehand?

本文关键字:检查 未定义 是否 出错 错误 为什么      更新时间:2023-09-26

我通过AJAX调用传入了一系列JSON对象。有些数据集包含字段C,有些不包含。当我包含以下代码时,它崩溃了。我试过undefinednull。两个崩溃。

if (myJsonObjects[i].C == undefined) {
  // …
}

当你说崩溃时,我想你指的是TypeError: cannot read property of undefined value

它崩溃的原因是在

行中

if(myJsonObjects[i].C == undefined){

我们实际上有myJSONObject[i] === undefined

所以你需要检查你的数组边界或者确保你的数组不是稀疏的

if(myJsonObjects[i].C == undefined){

相似
if(myJsonObjects[i] && myJsonObjects[i].C){

但是对于我的行,您检查myJsonObjects[i]myJsonObjects[i].c是否为空或未定义。

如果myJsonObjects[i].c持有false, "", 0, NaN

试试这个:

if (typeof myJsonObjects[i].C == 'undefined') {}

我想你可以先试一下再跳进水里:

if( i in myJsonObjects && myJsonObjects[i] && !( "C" in myJsonObjects[i] ) ) { }

但是你的原始代码不应该崩溃,也不应该抛出错误,如果myJsonObjects[i]被定义并且不是null

if ('C' in myJsonObjects[i]) { do_your_magic() }