正确检查 javascript 中的空值

properly checking null values in javascript

所以我已经研究这个问题好几天了,似乎找不到真正有效的答案。我正在处理一个 api(具体来说是 trello),当返回 json 对象时,它会在没有值的属性中放置一个 NULL 值。从 api 获取数据后,我正在解析数据,需要一种方法来跳过空值或删除它们。例如,这里是具有空值的对象的一部分:

{ 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"

您是否可以使用快捷方式 if (!update.due) 而不是 if (update.due !== null) 取决于 update.due 中可能存在的值范围以及您希望测试结果显示的内容适用于该值范围。


在 Javascript 中,您可以使用 === 检查特定值,或者您可以使用 == 允许类型转换,您可以检查任何真值或假值。

当你这样做时:

if (!update.due)

您正在检查 update.due 是否为任何虚假值。虚假值包括 null""0falseNaNundefined.

如果您要做的只是查看 update.due 中是否有一些非零值的数字或布尔值,那么 if (!update.due) 是紧凑的并且可以很好地完成工作。

另一方面,如果你真的想明确知道它是否包含 null,那么你必须专门针对 null 进行测试,如下所示:

if (update.due !== null)

由于 if (!update.due) 较短,因此非常常用来检查 update.due 中是否有定义的值。您必须注意 0 对您来说不是有效值,因为 null0 在此特定测试中会给出相同的结果。但只要您要测试的值不是空字符串或零,那么 if (!update.due) 就可以正常工作。