2017-01-20 4 views
0

a.bが設定されているかどうかわかりません。私はa.b[0].cが本当であるときだけ何かしたいです。私は次のようなことをすることができます:ネストされたプロパティの存在を確認するショートカットはありますか

if (a.b && a.b[0] && a.b[0].c) { 
    // ... 
} 

ネストされた存在をチェックするためのショートカットはありますか?このような状態を単純化することはできますか?

+2

んが存在しません! – adeneo

+0

これは、あなたが望むことを行うための、最も明快で最も簡潔な方法だと思います。そして、これが私がコフェスタイルをそんなに愛する理由です。 CSの場合は、「?b?[0]?c。then ...」と言うだけです。私は実際にjavascriptの将来のバージョンがcoffeescriptのより多くの単純さを組み込むことを願っています。 – jusopi

答えて

1

私はゴルフのコーディングに使用しましたが、私たちが使ったトリックの1つは次のとおりです。まず、myArray || []が評価さ

(myArray || [])[0] || 0 

MyArrayというが存在する場合、それは、それは空の配列を返していない場合、これは、それを返します。 myArrayが定義されていないとしましょう。次に、[][0]が定義されていないので、[][0] || 0式がANSを評価されます、これはあなたのケースでは0

を返すには、以下の方法を使用することができます何かが未定義かどう

((a.b || [])[0] || {}).c || {} 

これは、空のオブジェクトを返します。

私はあなたにこれを使うべきではないと言っています(実際はそうすべきではありません)、私はあなたに小さなソリューションがあることを伝えたいだけです。

あなたが行うことができます(ただし、それは冗長です)
+1

私はこれを気に入っていますが、コードをスキミングしている間は読みにくいため、実際の解決策としては見当たりません。しかし、どのような美しい一行のソリューションです! – jusopi

+0

haha​​、私もこれも大好きです:) –

+0

@jusopiこれはおそらくハッカーのカテゴリに入っています。 –

0

var exists; 

    try { 
    exists = a.b[0].c; 
    } catch(e) {} 

    if (exists) { 
    //... 
    } 
関連する問題