在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
, ""
, 0
, false
, NaN
, undefined
。
如果你想要做的是看看update.due
是否有一个非零的数值或布尔值,那么if (!update.due)
是紧凑的,并且工作很好。
另一方面,如果你真的想明确地知道它是否包含null
,那么你必须像这样专门testingnull
:
if (update.due !== null)
由于if (!update.due)
更短,所以通常用来检查update.due
是否有一些定义的值。 你必须小心, 0
对你来说不是一个有效的值,因为null
和0
会给这个特定的testing给出相同的结果。 但只要你testing的值不是空string或零,那么if (!update.due)
工作得很好。
要检查null特别是你会使用这个:
if(variable === null && typeof variable === "object") { //Do Something... }
这不正常吗?