オプショナルチェーン

オプショナルチェーン

オプショナルチェーン (optional chaining) 演算子 (?.) は、接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。

例えばこんなオブジェクトがあったとして…

const obj = {
    name:"ohasi",
    address:{
        town:"github"
    }
}

const obj2 = {
    name:"kasusi"
}

obj1とobj2のaddressを確認すると、obj2はundefinedになります。

obj1.address
 {town: 'github'}

obj2.address
 undefined

更に、addressのtownを取得してみます。 obj2はエラーになりました。

obj1.address.town
 'github'

obj2.address.town
VM1337:1 Uncaught TypeError: Cannot read properties of undefined (reading 'town')
    at <anonymous>:1:14

undefinedで更に潜っていくことはできない。
2階層以上外れるとエラーになりますが、ここでオプショナルチェーンを使うと…。

obj1.address?.town
 'github'

obj2.address?.town
 undefined

チェーンの整合性を確かめてくれるため、obj2もundefinedになりました。
なんて便利な!2か月前に知っていたかった…。ちょうどプロパティが保証されないオブジェクトの処理をやっていて、if文で整合性を確かめていた…。
今後使う機会があれば、使おうと思います。