私にとって前者は不必要に長く、読みにくいです。私の質問は、変数を潜在的に未定義になる可能性のあるものに設定することは本当に安全/良い習慣ですか?
エラーが発生しないという点で完全に安全です。また、これらすべてのルックアップを再度実行する必要がないことも意味します。
あなたの代替案もほとんど意味がないようです(そして確かに最初のコードスニペットと同じことをしていません)、それは間違っaBigObject['Key1']['Key2][Key3']
ていないとき(それをプッシュするのではなくそれ自体に割り当てる)の動作がまったく異なるためgeneralValues
です。 (質問を編集するとこれが修正されます。)
最初の例には確かに不要な括弧がたくさんあり、次のように書くことができます。
var currentVar = aBigObject['Key1']['Key2']['Key3'];
generalValues.push(!currentVar ? 0 : currentVar);
..そしておそらく次のように書く方が良いかもしれません
generalValues.push(aBigObject['Key1']['Key2']['Key3'] || 0);
あなたの一般的なポイントは、「なぜ最初のスニペットが使用されているのcurrentVar
ですか?」ということのようです。そして答えは、プロパティのルックアップは無料ではないということです。したがって、Key1
on 、result、およびその結果のルックアップを実行すると、再度ルックアップするのではなく、覚えて再利用できます。JavaScriptオブジェクトはハッシュマップであり、ルックアップは安価ですが、無料ではありません。しかし、その特定のケースでは、別の方法でそれを行うことができます(上記を参照)。aBigObject
Key2
Key3