次のネストされたデータ構造を検討してください。
var options = {
option1 = {
option1a : "foo",
option1b : "bar"
},
option2 = {},
}
上記のようなデータ構造があり、これを関数への入力のオプション パラメーターのリストとして使用しています。これらはすべてオプションの入力であるため、存在する場合と存在しない場合があります。最初は、ステートメントのチェーンを使用typeof x == "undefined"
して、たとえば 、 、および がすべて定義されていることを確認していoptions
ましoption1
たoption1a
。私のコードは、変数を定義するために次のようになります。
if(typeof option != "undefined"
&& typeof option.option1 != "undefined"
&& typeof option.option1.option1a != "undefined){
var x = option.option1.option1a;
} else {
var x = "default";
};
これを次のように短縮できることに気付きました。
var x = option && option.option1 && option.option1.option1a || "default";
&&
一貫して最後の true または最初の false ステートメントを返しますか? そして||
、一貫して最初の真のステートメントを返しますか? ロジックは、いくつかの実装でブール値を返すことができると指示しますが、ブラウザ/JavaScript の実装については、そのステートメントを決定的に行うのに十分な知識がありません。これはこれを行うための安全な方法ですか、それともより良い方法はありますか?