检查undefined in!条件

时间:2016-06-06 12:59:39

标签: javascript

我正在检查object是否包含用户属性,而用户阵列的第一个详细信息object是否包含property

if (a.obj.twitter['user'] && Array.isArray(a.obj.twitter['user'])
                    && a.obj.twitter['user'][0] && a.obj.twitter['user'][0].details[prop]
                    && !b.obj.twitter['user'][0].details[prop]) {

我在检查! too?时是否应该这样做?有更好的方法吗?

!b.obj.twitter['user'][0].details[prop]

2 个答案:

答案 0 :(得分:1)

您可以在while noAnswer:块中尝试此检查

try catch

答案 1 :(得分:1)

  

“当我检查时,我也应该这样做吗?”

是的,它会以同样的方式写出来,除了在开幕式之前有!的parens:

if (a.obj.twitter['user'] &&
    Array.isArray(a.obj.twitter['user']) &&
    a.obj.twitter['user'][0] &&
    a.obj.twitter['user'][0].details[prop] &&

    !(b.obj.twitter['user'] &&
      Array.isArray(b.obj.twitter['user']) &&
      b.obj.twitter['user'][0] &&
      b.obj.twitter['user'][0].details[prop])) {

但是...

  

“有更好的方法吗?”

我认为这值得推广到一个单独的函数中,只是为了保持可读性。

您可以执行以下操作:

function hasProp(o, prop) {
  return !!(o.obj.twitter['user'] &&
            Array.isArray(o.obj.twitter['user']) &&
            o.obj.twitter['user'][0] &&
            o.obj.twitter['user'][0].details[prop])
}

然后就是:

if (hasProp(a, prop) && !hasProp(b, prop)) {...