?. 演算子によるオプショナルチェーン
深くネストされたプロパティに安全にアクセスします。
「?. 演算子によるオプショナルチェーン」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。
問題点
undefinedまたはnullであるもののプロパティを読み取ると、TypeErrorが発生します。オプショナルチェーンを使うと、ネストされた値を安全に読み取れます。
const user = {};
console.log(user.profile && user.profile.name);?.演算子
オプショナルチェーン演算子?.は、左側の値がnullまたはundefinedの場合に処理を止めてundefinedを返します。そのため、エラーは発生しません。
const user = {};
console.log(user.profile?.name); // undefined, no error深いプロパティの読み取り
複数の?.を連結すると、各階層で手動のチェックを行わずに、深くネストされた構造をたどれます。
const data = { user: { address: { city: "Paris" } } };
console.log(data.user?.address?.city); // "Paris"短絡評価
チェーン内のいずれかのつながりがnullishの場合、式全体がundefinedに短絡し、残りは評価されません。
const data = { user: null };
console.log(data.user?.address?.city); // undefinednullish値だけがトリガーになる
?.が短絡するのはnullまたはundefinedの場合だけです。0や""のような他のfalsy値は実際の値なので、通常どおりアクセスされます。
const obj = { count: 0 };
console.log(obj.count?.toString()); // "0"&&との比較
?.が登場する前は、&&によるガードを連結していました。オプショナルチェーンを使うと、同じ意図をより短く明確に表現できます。
const u = { profile: { name: "Ada" } };
const a = u && u.profile && u.profile.name;
const b = u?.profile?.name;
console.log(a, b);呼び出し後のチェーン
メソッド呼び出しの後もチェーンを続け、戻り値のプロパティに安全にアクセスできます。
const config = { get: () => ({ port: 8080 }) };
console.log(config.get()?.port); // 8080チェーン途中での短絡評価
途中のつながりがnullishの場合、後続のつながりで関数を呼び出せる場合でも、評価は直ちに停止します。
const obj = { a: null };
console.log(obj.a?.b.c.d); // undefined, never touches b/c/d代入には使えない
オプショナルチェーンは読み取りに使う機能です。オプショナルチェーンに代入することはできず、=の左辺に置くと構文エラーになります。
const o = { x: 1 };
// o?.x = 5; // SyntaxError
o.x = 5;
console.log(o.x);配列との組み合わせ
ブラケット記法によるアクセスにも使えます。この方法については後で詳しく扱います。nullish値に対する安全性は同じです。
const state = { items: ["a", "b"] };
console.log(state.items?.[0]); // "a"使いすぎを避ける
値が正当に存在しない可能性がある場所でだけ?.を使ってください。使いすぎると、本来確認したいエラーまで隠してしまうことがあります。
const order = { total: 42 };
console.log(order.total?.toFixed(2)); // "42.00"クイックチェック
結果を予測してください。
まとめ
?.演算子はプロパティを安全に読み取ります。左側がnullまたはundefinedの場合は、エラーを発生させずにundefinedを返し、チェーンの残りを短絡します。トリガーになるのはnullish値だけで、0や""では発生しません。また、代入先として使うことはできません。
よくある質問
「?. 演算子によるオプショナルチェーン」レッスンは無料ですか?
はい。「?. 演算子によるオプショナルチェーン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。
「?. 演算子によるオプショナルチェーン」で何を学びますか?
深くネストされたプロパティに安全にアクセスします。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
JavaScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「?. 演算子によるオプショナルチェーン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJavaScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ?. 演算子によるオプショナルチェーン
- ?? による null 合体
- ?. と ?? を組み合わせる
- オプショナルな呼び出しとインデックスアクセス