在JavaScript中正确检查空值

所以我一直在研究这个问题好几天,似乎无法find一个真正有效的答案。 我正在处理一个api(trello是具体的),当提供返回json对象在没有值的属性中放置一个NULL值。 我从api获取数据后parsing数据,并需要一种方法来跳过空值或删除它们。 例如,下面是一个空值对象的一部分:

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

到期属性被用作对别处拉出的date时间戳的覆盖。 现在我正在使用这似乎工作:

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

这是检查空值的唯一正确方法吗? 这是我发现工作始终如一的唯一途径。 另外,当从一个对象中删除值有一种方法,我可以检查,所以我可以完全删除属性?

 "if Obj[attr] === null" 

是否可以使用快捷方式if (!update.due)而不是if (update.due !== null)取决于可能在update.due的值的范围,以及您希望testing的结果是为了那个价值的范围。


在Javascript中,您可以使用===检查特定的值,或者您可以允许使用==来进行types转换,您可以检查是否存在任何真实或错误的值。

当你这样做时:

 if (!update.due) 

你正在检查update.due是否有错误的价值。 Falsey值包括null""0falseNaNundefined

如果你想要做的是看看update.due是否有一个非零的数值或布尔值,那么if (!update.due)是紧凑的,并且工作很好。

另一方面,如果你真的想明确地知道它是否包含null ,那么你必须像这样专门testingnull

 if (update.due !== null) 

由于if (!update.due)更短,所以通常用来检查update.due是否有一些定义的值。 你必须小心, 0对你来说不是一个有效的值,因为null0会给这个特定的testing给出相同的结果。 但只要你testing的值不是空string或零,那么if (!update.due)工作得很好。

要检查null特别是你会使用这个:

 if(variable === null && typeof variable === "object") { //Do Something... } 

这不正常吗?