1

如何检查 json 对象的子属性是否为空?虽然 firefox 可以识别它,但 Chrome 和 IE 8 却不能。

我有一个像这样的 json 对象:

centralData.phone.id;
centralData.address.id;
centralData.product.id;
//and many others

我想检查它的某些属性是否可能为空。我正在这样做并且它有效:

if(centralData.phone != null){
   //Do things
}

但这不会,因为我并不总是有 StockGroup

if(centralData.product.StockGroup != null){
 //Error
}

那么,我如何检查是否centralData.product.StockGroup 为空?

4

4 回答 4

4

我想你会检查一个属性是undefined不是

if(typeof (centralData.product || {}).StockGroup) !== "undefined") {
   /* do something */
}

这种检查在 ajaxian网站上有描述,整体代码要短得多

于 2012-04-18T15:20:18.243 回答
1

你不想检查它是否是null,你想检查属性是否存在(undefined在这种情况下)。您的检查有效,因为您使用==而不是===,它在类型(undefined == null,但undefined !== null)之间转换。

当您要检查嵌套属性时,您需要检查每个级别。我建议使用in运算符,因为它会检查属性是否存在并忽略它的值。

这会做你想做的事情:

if("product" in centralData && "StockGroup" in centralData.product){
    …
}
于 2012-04-18T15:20:54.100 回答
0

尝试将您的对象与未定义的对象进行比较,而不是使用 null。

于 2012-04-18T15:16:17.060 回答
0

由于 JavaScript 采用惰性求值,因此您可以执行这样的检查而不会影响性能:

if(centralData.product != null && centralData.product.StockGroup != null){

}
于 2012-04-18T15:18:24.950 回答