JS

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.nameobj.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はそれぞれ独立した型を持つ

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A