这些嵌套的'if typeof(bla)else'语句可以缩短吗?

时间:2012-12-09 11:32:53

标签: javascript

我有一段像这样的代码。这段代码有效,但看起来很糟糕。

if(typeof(d.object) != "undefined"){
  if(typeof(d.object.property) != "undefined"){
    if(typeof(d.object.property.length) != "undefined"){
      // do the code
    }
    else alert("error");
  }
  else alert("error");
}
else alert("error");

有没有什么方法可以重写它,所以它做同样但更有效。特别是因为错误都是一样的。

3 个答案:

答案 0 :(得分:7)

假设你对property不感兴趣,如果它的长度为空或0(或者更常见的是“Ddsorak建议的”假“),那么你可能会让它更具可读性即使不使用try/catch

if (d && d.object && d.object.property && d.object.property.length){

} else {
   alert('error');
}

在大多数情况下,这是要走的路。

关于“falsy”,from the MDN

  

任何未定义的值,null,0,NaN或空字符串   (“”)和任何对象,包括值为false的布尔对象,   传递给条件语句时评估为true

答案 1 :(得分:2)

try{
    if(typeof(d.object.property.length) != "undefined"){
      // do the code
    }else{
      throw "Value undefined";
    }
}catch(e){
    alert("error");
}

只要您只重构一些您知道可行的代码,这就有效,但它会使调试变得更难。

答案 2 :(得分:0)

好建议,

这是一个功能的工作!

function has(v){return typeof(v) !== "undefined";};

if(has(d) && has(d.object) && has(d.object.property) && has(d.object.property.lenth)) {
   ...
} else alert("error");

此致