2016-04-12 5 views
0

別のファイルにa.b.c.dを実装しているとします。チェーンオブジェクトフォームで未定義のプロパティをチェックするベストプラクティスは何ですか?

したがって、これらのプロパティが定義されていない場合、a、b、cが定義されており、catch節にフォールバックする必要があります。

現在、私はこのコードを使用しています。しかし、それは長くて、汚れていて、維持するのが難しいです。

try{ 
    if(!("a" in window)) { 
    throw new Error(); 
    } 
    if(!("b" in a)) { 
    throw new Error(); 
    } 
    if(!("c" in a.b)) { 
    throw new Error(); 
    } 
} catch(e){ } 

ベストプラクティスは何ですか?

+0

正確にどちらが存在しないか知りたいですか? – Linek

+0

@Linek私が「はい」と答えるとどうなりますか? – Lukabot

+0

[*アクセス/プロセス(入れ子になった)オブジェクト、配列、JSON *](http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json/11922384#11922384 )。 「ベストプラクティス」を定義すると、それは「ベスト」の基準に依存します。 – RobG

答えて

1

は、手動でそれらのそれぞれの場合にエラーを投げている、しかし、あなたはただその代わりにキャッチすることができますので、あなたがundefinedのプロパティにアクセスしようとする行動は、とにかくにReferenceErrorを投げることです。

try{ 
    a.b.c.d 
} catch(e){ // Either a, a.b, or a.b.c was undefined } 
+0

[*エラー*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)を捕まえたので、メッセージで、例えば'未定義のd 'を読み込めません。 ;-) – RobG

-2
if !(a && a.b && a.b.c && a.b.c.d) { 
    throw new Error(); 
} 
// else a.b.c.d exists 
+1

'a.b.c.d'が存在し、それが偽の値を持っている場合を除いて、これはエラーを投げます(私の投票BTWではなく)。 – RobG

+0

大きなポイント!おそらく私は私の答えをdownvoteする必要があります:) – Wainage

関連する問題