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であるか(または、Jan Dvorakによって提案されているように、より一般的には「偽」であるか)に関心がないと0すると、次を使用しなくても、もう少し読みやすくなる可能性があります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 に答える