JavaScriptで開発していると、次のようなエラーを見たことがあると思います。
Cannot read properties of undefinedこれは存在しないオブジェクトのプロパティを参照した場合に発生します。
例えば次のコードです。
const user = {}
console.log(user.profile.name)結果
Uncaught TypeError: Cannot read properties of undefined理由は
user.profile が undefined従来の書き方
昔はこのように書く必要がありました。
if (user && user.profile && user.profile.name) {
console.log(user.profile.name)
}もしくは
const name =
user &&
user.profile &&
user.profile.nameこれではコードが冗長で読みにくくなります。
Optional Chainingを使う
そこで登場
?.です。
const name = user?.profile?.nameこれだけです。
もし、profile が存在しない場合でもエラーにならず「undefined」を返します。
実務でよくある例
APIレスポンスを扱う場合
const response = {
data: {
user: {
name: "Taro"
}
}
}
const name = response?.data?.user?.name
console.log(name)API仕様が変わってもエラーになりにくいコードになります。
関数にも使える
user?.login?.()login関数が存在する場合のみ実行されます。
配列にも使える
const users = []
console.log(users?.[0]?.name)Optional Chainingのメリット
- エラーを防げる
- コードが短くなる
- 可読性が高い
- APIレスポンス処理が安全
まとめ
Optional Chainingを使うことで
Cannot read property of undefinedエラーを防ぎつつ、シンプルで読みやすいコードを書くことができます。