0Pricing
JavaScript Academy · レッスン

?? による null 合体

null と undefined の場合にのみデフォルト値を指定します。

「?? による null 合体」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。

デフォルト値の提供

値がない場合に備えて、代替値を用意したいことはよくあります。Null合体演算子を使うと、必要な場合にだけデフォルト値を設定できます。

const name = undefined;
console.log(name ?? "Guest"); // "Guest"

?? 演算子

二重疑問符演算子は、左辺が null または undefined の場合にだけ右辺の値を返します。

console.log(null ?? "fallback");      // "fallback"
console.log(undefined ?? "fallback"); // "fallback"
console.log("hi" ?? "fallback");      // "hi"

|| を使わない理由

論理 OR の || は、0、""、false など、あらゆる falsy な値を代替値に置き換えます。そのため、実際のデータでは不適切な場合がよくあります。

console.log(0 || 10);  // 10  (probably unwanted)
console.log(0 ?? 10);  // 0   (keeps the real value)

空文字列の場合

|| を使うと意図的に設定した空文字列が置き換えられますが、?? では "" は nullish ではないため、そのまま保持されます。

const note = "";
console.log(note || "none"); // "none"
console.log(note ?? "none"); // ""

false は保持される

実際の false 値は ?? では保持されますが、|| では置き換えられます。

const enabled = false;
console.log(enabled ?? true); // false
console.log(enabled || true); // true

設定を安全に読み取る

?? は、0 や空の値がユーザーが意図的に選択できる有効な設定値である場合に適しています。

function getVolume(settings) {
  return settings.volume ?? 50;
}
console.log(getVolume({ volume: 0 })); // 0

変数にも使える

任意の式に使うことができ、nullish ではない最初のオペランドを返します。

let cached = null;
const value = cached ?? computeValue();
function computeValue() { return 99; }
console.log(value); // 99

短絡評価

|| や && と同様に、?? も短絡評価を行います。左辺が nullish でなければ、右辺は評価されません。

function side() { console.log("called"); return 1; }
const x = "ready" ?? side(); // side() never runs
console.log(x);

&& や || とは直接混在できない

曖昧さを避けるため、括弧なしで ?? を && や || と混在させると構文エラーになります。

const a = true, b = null;
// const c = a || b ?? 1; // SyntaxError
const c = (a || b) ?? 1;
console.log(c);

デフォルト関数引数と ?? の違い

デフォルト引数が適用されるのは、引数が undefined の場合だけです。?? では、明示的に渡された null も処理できます。

function greet(name = "Guest") { return "Hi " + name; }
console.log(greet(null)); // "Hi null"
function greet2(name) { return "Hi " + (name ?? "Guest"); }
console.log(greet2(null)); // "Hi Guest"

どちらを選ぶべきか

0、""、false を有効な値として保持する必要がある場合は ?? を使います。falsy な値をすべて代替値にしたい場合にだけ || を使います。

const retries = 0;
console.log(retries ?? 3); // 0 kept

確認問題

演算子を比較してみましょう。

まとめ

?? 演算子は、左辺が null または undefined の場合にだけ右辺を返し、0、""、false は保持します。そのため、実際のデータにデフォルト値を設定する場合は || より安全です。短絡評価を行い、括弧なしで &&/|| と混在させることはできません。

よくある質問

「?? による null 合体」レッスンは無料ですか?

はい。「?? による null 合体」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。

「?? による null 合体」で何を学びますか?

null と undefined の場合にのみデフォルト値を指定します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「?? による null 合体」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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