在JavaScript中正确检查空值

问题描述:

所以我一直在研究这个问题几天,似乎无法找到一个实际工作的答案。我正在处理一个api(trello是特定的),当提供返回的json对象时,在没有值的属性中放置一个NULL值。我从api获取数据后解析数据,并需要一种方法来跳过空值或删除它们。例如,下面是具有空值的对象的一部分:在JavaScript中正确检查空值

{ name: 'blah', 
    due: null, 
    cards: [ [ [Object], [Object], [Object] ], 
[ [Object] ], 
[ [Object], [Object], [Object] ], 
null, 
[ [Object], [Object] ], 
[ [Object], [Object], [Object], [Object] ], 
[ [Object], [Object] ], 
[ [Object], [Object], [Object] ] ] } 

due属性用作对其他地方拉出的日期时间戳的覆盖。现在我正在使用这似乎工作:

if (!update.due) { 
    update.lastUpdated = update.history[0].date; 
} else { 
    update.lastUpdated = update.due; 
} 

这是唯一正确的方法来检查空值?它是我发现持续工作的唯一途径。此外,从对象中删除值时,是有办法,我可以检查这样的话我可以完全删除该属性?:

"if Obj[attr] === null" 
+0

我的意思是,空将永远是虚假的,但你可以改为检查它是否为空if(update.due === null)'这样你就不会得到误报(或否定,但是你看看它)。 – 2015-03-18 21:12:20

无论是否可以使用快捷if (!update.due)而非if (update.due !== null)取决于各范围值可能在update.due以及您希望测试的结果是针对该值的范围。


在Javascript中,您可以检查一个特定的值与===也可以允许类型转换与你==可以检查是否有任何truthy或falsey值。

当你这样做:

if (!update.due) 

要检查,看是否update.due是任何falsey值。 Falsey值包括null,"",0,false,NaNundefined

如果你正在试图做的是看看update.due是否有一个非零值的数值或布尔值,那么if (!update.due)是紧凑的,并做得很好。

在其他手,如果你真的想unequivocably知道它是否包含null或没有,那么你必须专门为null测试是这样的:

if (update.due !== null) 

由于if (!update.due)较短,这是非常通常用于检查update.due中是否有一些定义的值。您必须小心,0对您来说不是一个有效的值,因为null0会给出与此特定测试相同的结果。但只要你测试的值不是空字符串或零,那么if (!update.due)工作得很好。

+0

很好的解释,我只是不确定我是否可以实际检查null本身。谢谢! – 2015-03-18 21:33:56