JavaScript:检查对象字段是否未定义,而不检查对象是否未定义

时间:2011-04-29 18:30:49

标签: javascript types typeof

我的IVR应用程序以JS对象和数组的形式接收业务数据。例如,我们的客户名称按如下方式访问:

customerData.customerList[customerIndex].customerName

现在,在某些情况下,customerName未定义,因为整个对象未定义。现在,为了捕获它,我有一些嵌套逻辑,在最终检查最后一个之前检查每个级别是否未定义:

if (typeof customerData != 'undefined' &&
  typeof customerData.customerList &&
  typeof customerData.customerList[customerIndex] != 'undefined' &&
  typeof customerData.customerList[customerIndex].customerName != 'undefined')
{
  //do something awesome with customer name, here
}

是否有更简单(更干净?)的方法来完成此操作,而无需检查对象上的每个字段?

感谢。

2 个答案:

答案 0 :(得分:6)

您需要编写第一个typeof以确保已声明customerData。之后,您可以跳过未定义的测试,直到您想要的任何级别

((customerData || {}).customerList || [])[customerIndex] !== undefined

答案 1 :(得分:1)

我知道这有效,但我会猜测会有一些反对意见......我很乐意听到:

var customerName = function(){
   try{ return customerData.customerList[customerIndex].customerName; }
   catch(e){ return null; }
};
if (customerName) {
   ...
}