4

次のネストされたデータ構造を検討してください。

var options = {
    option1 = {
        option1a : "foo",
        option1b : "bar"
    },
    option2 = {},
}

上記のようなデータ構造があり、これを関数への入力のオプション パラメーターのリストとして使用しています。これらはすべてオプションの入力であるため、存在する場合と存在しない場合があります。最初は、ステートメントのチェーンを使用typeof x == "undefined"して、たとえば 、 、および がすべて定義されていることを確認していoptionsましoption1option1a。私のコードは、変数を定義するために次のようになります。

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 の実装については、そのステートメントを決定的に行うのに十分な知識がありません。これはこれを行うための安全な方法ですか、それともより良い方法はありますか?

4

1 に答える 1