null / undefined null と undefined
最終更新:2026-10-22
null / undefined null と undefined
null は「意図的に空である」ことを表し、undefined は「まだ代入されていない/存在しない」ことを表します。strictNullChecks を有効にすると両者は独立した型になり、空値を先に処理しないと通常の値として使えません。
| グループ | 基本型 |
|---|---|
| 種類 | 型 |
| strict モード | 必要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
let nickname: string | null = null;
if (nickname !== null) {
nickname.toUpperCase(); // null を除外してからでないと使えない
}
let maybe = list.find(x => x.ok); // undefined は見つからないことを表す
⚙️ パラメータ
| a?.b | 左側が null/undefined のとき、式全体がエラーにならず undefined に短絡します |
|---|---|
| a ?? b | 左側が null/undefined のとき右側のデフォルト値を取ります。0 や "" はスキップされません |
戻り値:戻り値はありません。null/undefined は基本の型注釈であり、実行時コードを一切生成しません。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
Ada guest
0
(トランスパイル後の実行出力。strictNullChecks が有効な場合、missing.length を直接呼ぶとコンパイルエラーになります)
💡 ポイント
⚠️ 注意 strictNullChecks が無効だと null/undefined はどんな型にも代入でき、null ポインタ対策は自己規律頼みになります。新規プロジェクトでは必ず strict を有効にしてください。
💡 ヒント ?. と ?? は null 許容値を処理する黄金の組み合わせです。user?.address?.city ?? "unknown" の 1 行で値の取得とフォールバックが済みます。
ℹ️ 説明 ?? は左側が null/undefined のときだけ右側を取ります。0、false、"" はそのまま残ります。これが || との最も重要な違いです。
🏷️ 関連基本型
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q ?? と || の違いは何ですか?
A || はすべての偽値(0、""、false)を「空」とみなして右側を取ります。?? は null/undefined だけを認めます。デフォルト値の設定はほとんどの場合 ?? を使うべきで、そうしないと 0 や空文字列が誤って上書きされます。
Q null と undefined は意味的にどう使い分けますか?
A 慣例では、undefined は「まだ値がない」(引数が渡されていない、プロパティが存在しない)、null は「意図的に空にした」(値を消去した)を表します。1 つの API の中では同じ使い方を保てば十分です。
Q オプショナルチェーンの後の値の型はどうなりますか?
A T | undefined になります。チェーン上のどの 1 環でも空である可能性があれば、結果には undefined が含まれ、後続で ?? によるフォールバックか再ナローイングが必要です。