JavaScriptの任意の連鎖


JavaScriptのオプションの連鎖は何ですか?
オプションの連鎖は、ネストされたオブジェクトのプロパティのインラインチェックを可能にする2020年に導入されたJavaScript言語の新機能です.それは非常に簡潔かつ簡単にもエレガントにプログラムが失敗することができますメソッドを書くことです.それは存在しないオブジェクトのプロパティにアクセスしようとすると、恐ろしくcannot read property of undefinedエラーメッセージを回避します.
オプションの連鎖も安全なナビゲーションとして知られています.
オブジェクト(animals)を与えられて、どのように、あなたはnamedogの入れ子にされた値に割り当てて、アクセスするでしょうか?
const animals = {
    cat: {
        name: "marge",
        age: 2,
    },
    dog: {
        name: "bob",
        age: 6,
    },
}
オプションの連鎖なしでは、dogが三次式でanimalsのプロパティであるかどうかを確認します.const name = animals.dog ? animals.dog.name : undefinedこの3進法の使用は有効ですが、オブジェクトにドリルをかけるときにプロパティをチェックする方法が少し長すぎます.
任意の連鎖で、これは非常に効率的に行うことができます.const name = animals.dog?.name?dogのプロパティとして存在するかどうかを調べるために、animalsを使用しています.それがそうでないならば、undefinedとオブジェクト連鎖短絡を返します.nameの特性としてdogが存在するならば、プログラムは進行して、animalsdogのプロパティを得ることを試みます.
この時点で、オプションとしてnameがプロパティとして存在する場合、オプションの連鎖は気にかけません.実際には、オブジェクトの穴の終端のオプションのチェーンへの方法はありません.この構文は正しくない:nameしかし、この構文はすばらしいです:const name = animals.dog?.name?.以下の例では、const name = animals?.dogでドット表記の連鎖にこだわることがどれほど優雅であるかを見ることができます.一方、エラーを投げる代わりに、?を返すことによってプログラムが優雅に失敗することを保証します.
const dogName = animals.dog.name

const catName = animals.cat?.name

const duckName = animals.duck?.name

const dogWeight = animals.dog?.weight

console.table({
    dogName: dogName,
    catName: catName,
    duckName: duckName,
    dogWeight: dogWeight,
})
これはログに記録されます.
インデックス

ドッグネーム
ボブ
catname
マージ
アヒル
未定義
ドグウェイト
未定義
オブジェクトの検索プロパティを超えて、任意の連鎖を使用して、オブジェクトの式、配列インデックス、および関数の引数の信頼性をチェックすることもできます.
obj.val?.prop
obj.val?.[expr]
obj.arr?.[index]
obj.func?.(args)
注意すべき風変わりなことは、ドットの表記法が使用されていない状況、例えばインデックスを有する配列にアクセスする際に、オプションの連鎖が両方のシンボルundefinedおよび?を必要とすることである.
オプションの連鎖(別名セーフナビゲーション)は、異なる言語で少し異なった構文を持つかもしれません.ルビーでは、.の代わりに、言語はinteresting reasons?.を使います.しかしながら、多くの言語では、&.と同様のものが使用されている.
参考文献
MDN
FreeCodeCamp