1

重複の可能性:
JavaScript では、オブジェクト グラフに深くネストされたプロパティをテストしますか?

obj.method1.mthod2 が true の場合にのみ、このコード ブロックを実行したいと考えています。ただし、obj 自体が定義されていない場合もあります。または method1 が定義されていません。

if (obj.method1.method2) {

}

だから私はそのようにすることになっていますか?

if (typeof(obj)!="undefined" && typeof(obj.method1)!="undefined" && typeof(obj.method1.method2)!="undefined" && obj.method1.method2) {

}

それは醜く見えます!短くする方法はありますか?このDetecting an undefined object propertyリンクを見たことがありますが、役に立ちません。

4

3 に答える 3

4

私は通常このように書きます:

if (typeof(obj) != "undefined" && obj.method1 && obj.method1.method2){
    // The magic
}

ただし、プリミティブ型の一部のインスタンスは未定義ではなくてもfalseと評価されると確信しているため、ほとんどの場合、これは関数を使用して行います。

編集:lanzzがコメントで指摘しているように、objにはtypeofが必要です。

于 2012-10-25T06:58:42.083 に答える
0

試すtry

try {
    if(obj.method1.method2) {
         alert("ok!");
    }
}catch(e) {
    alert("obj or some property not defined");
}
于 2012-10-25T07:08:17.693 に答える
0

もっと簡潔に:

  if (obj && obj.method1 && obj.method1.method2) {
    ...
  }
于 2012-10-25T07:16:54.313 に答える