0Pricing
JavaScript Academy · レッスン

?. 演算子によるオプショナルチェーン

深くネストされたプロパティに安全にアクセスします。

「?. 演算子によるオプショナルチェーン」は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); // undefined

nullish値だけがトリガーになる

?.が短絡するのは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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ?. 演算子によるオプショナルチェーン
  2. ?? による null 合体
  3. ?. と ?? を組み合わせる
  4. オプショナルな呼び出しとインデックスアクセス
← JavaScript Academyに戻る