a.b
が設定されているかどうかわかりません。私はa.b[0].c
が本当であるときだけ何かしたいです。私は次のようなことをすることができます:ネストされたプロパティの存在を確認するショートカットはありますか
if (a.b && a.b[0] && a.b[0].c) {
// ...
}
ネストされた存在をチェックするためのショートカットはありますか?このような状態を単純化することはできますか?
a.b
が設定されているかどうかわかりません。私はa.b[0].c
が本当であるときだけ何かしたいです。私は次のようなことをすることができます:ネストされたプロパティの存在を確認するショートカットはありますか
if (a.b && a.b[0] && a.b[0].c) {
// ...
}
ネストされた存在をチェックするためのショートカットはありますか?このような状態を単純化することはできますか?
私はゴルフのコーディングに使用しましたが、私たちが使ったトリックの1つは次のとおりです。まず、myArray || []
が評価さ
(myArray || [])[0] || 0
MyArrayというが存在する場合、それは、それは空の配列を返していない場合、これは、それを返します。 myArrayが定義されていないとしましょう。次に、[][0]
が定義されていないので、[][0] || 0
式がANSを評価されます、これはあなたのケースでは0
を返すには、以下の方法を使用することができます何かが未定義かどう
((a.b || [])[0] || {}).c || {}
これは、空のオブジェクトを返します。
私はあなたにこれを使うべきではないと言っています(実際はそうすべきではありません)、私はあなたに小さなソリューションがあることを伝えたいだけです。
あなたが行うことができます(ただし、それは冗長です)私はこれを気に入っていますが、コードをスキミングしている間は読みにくいため、実際の解決策としては見当たりません。しかし、どのような美しい一行のソリューションです! – jusopi
haha、私もこれも大好きです:) –
@jusopiこれはおそらくハッカーのカテゴリに入っています。 –
var exists;
try {
exists = a.b[0].c;
} catch(e) {}
if (exists) {
//...
}
んが存在しません! – adeneo
これは、あなたが望むことを行うための、最も明快で最も簡潔な方法だと思います。そして、これが私がコフェスタイルをそんなに愛する理由です。 CSの場合は、「?b?[0]?c。then ...」と言うだけです。私は実際にjavascriptの将来のバージョンがcoffeescriptのより多くの単純さを組み込むことを願っています。 – jusopi