2011-11-07 59 views
-1

我通过AJAX调用传入了一系列JSON对象。一些数据集包括字段C,有些则没有。当我包含下面的代码时,它崩溃了。我试过undefinednull。两者都崩溃。为什么这个检查会抛出一个错误,即使我事先检查它是否未定义?

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

此行不应该是浏览器的原因崩溃,假设'myJsonObjects [i]'是一个对象。我认为你必须发布更多的代码。 –

+0

if(myJsonObjects [i] .C ==“undefined”){ - 检查“undefined”不要忘记从未定义的字符串中创建一个字符串 – philipp

+3

@philipp:只能与'typeof'一起使用。 –

回答

3

当你说崩溃时,我认为你的意思是TypeError: cannot read property of undefined value

崩溃的原因是因为在该行

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

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

所以,你真的需要检查数组边界或确保您的数组不疏

1

试试这个:

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

错误不会奇迹般地消失。 – Raynos

+1

@Raynos剔除神秘的评论并提供建设性的建议。 – JAAulde

+0

我同意@Raynos,这与OP中功能相同的代码完全相同,崩溃原因根本没有被考虑。 – Esailija

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

是类似

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

,但与我行,你检查是myJsonObjects[i]myJsonObjects[i].c是null或undefined。

需要说明的是,如果myJsonObjects[i].c持有false, "", 0, NaN

1

我想你可以稍微右跳之前探探:

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

但是你原来的代码不应该崩溃,同样不应该抛出错误如果myJsonObjects[i]被定义并且不为空

1

如何约

if ('C' in myJsonObjects[i]) { do_your_magic() } 
相关问题