2

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

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");

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

4

3 回答 3

7

假设您property对它的长度是否为 null 或0(或更一般地说是 Jan Dvorak 所建议的“虚假”)不感兴趣,那么即使不使用,您也可以使其更具可读性try/catch

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

} else {
   alert('error');
}

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

关于来自 MDN的“虚假” :

任何非未定义、null、0、NaN 或空字符串 ("") 的值,以及任何对象,包括值为 false 的布尔对象,在传递给条件语句时计算结果为 true

于 2012-12-09T11:36:39.400 回答
2
try{
    if(typeof(d.object.property.length) != "undefined"){
      // do the code
    }else{
      throw "Value undefined";
    }
}catch(e){
    alert("error");
}

只要您只是重构一些您知道有效的代码,这就会起作用,但这会使调试变得更加困难。

于 2012-12-09T11:35:24.207 回答
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");

问候

于 2012-12-09T11:55:28.983 回答