null・undefined の違い
初級読み方:ヌル・アンデファインド のちがい|英語:null vs undefined
undefinedは「値がまだ入っていない」状態、nullは「意図的に空にした」状態。
やさしい説明
undefined は「まだ値が入っていない」状態。null は「意図的に空にした」状態です。どちらも「値がない」ことを表しますが意味が違います。
手紙に例えると、undefined は「届いていない手紙」、null は「届いたけど白紙の手紙」です。
変数を宣言しただけ(let x;)だと undefined。明示的に「空」にしたいときは null を代入します。
具体例・使い方
// undefined: 値が設定されていない
let x;
console.log(x); // undefined
// null: 意図的に「空」にした
let user = null; // 「ユーザーはまだいない」
// よくある場面
const obj = { name: "太郎" };
obj.email; // undefined(プロパティが存在しない)
// 両方チェックする便利な書き方
if (value == null) { ... } // null と undefined の両方にマッチ 一覧で比較
| undefined | null | |
|---|---|---|
| 意味 | まだ値が入っていない | 意図的に空にした |
| 誰が設定する | JSが自動で | 自分で代入する |
| typeof の結果 | "undefined" | "object"(歴史的バグ) |
| 出る場面 | 未宣言・存在しないプロパティ | 「データなし」を明示したいとき |
いつ使う?
- null — 「まだデータがない」を自分で示したいとき(APIレスポンス待ちの初期値など)
- undefined — 自分で代入するものではなく、JSが自然に付ける状態
- == null — nullとundefinedをまとめてチェックしたいとき(両方にマッチ)
実務では「初期値は null、未設定は自然と undefined」と使い分けます。両方まとめて判定したいときは if (value == null)(イコール2つ)が便利。これだけは == を使ってOKな数少ない例です。
間違いやすいポイント
❌ typeof null が "object" を返す
JavaScript誕生時からの有名なバグで、今も修正されていません。null判定には typeof ではなく === null を使いましょう。
typeof null // "object"(歴史的バグ!)
typeof undefined // "undefined"
// null チェックは === null を使う
if (value === null) { /* ... */ } ❌ 存在しないプロパティを使おうとして「undefined」エラー
obj.user.name で obj.user が undefined だと「Cannot read properties of undefined」になります。obj.user?.name(オプショナルチェーン)で安全に書けます。
よくある疑問
Q: どちらを使えばいい?
A: 「空」を明示したいときはnullを使います。undefinedは自分で代入せず、JavaScriptが自動で設定するものです。
Q: null == undefinedはtrue?
A: はい。==ではtrueですが、===ではfalseです。型が違うためです。
関連用語
- JavaScript — null・undefinedはJSの「値がない」を表す特別な値
- 変数 — 宣言だけして値を入れないと undefined になる
- 型 — null・undefinedはそれぞれ独立した型を持つ
📖 関連レッスン
レッスンを見る →