1. null は意図的に空なので true
  2. 引数を渡さない undefined は false
  3. 空文字は null ではない
  4. 数値の 0 は null ではない
  5. 通常の文字列は false
コース一覧
JavaScript入門:コードを動かす
null と undefined を見分ける

JavaScript入門:コードを動かす

HTML に JavaScript を読み込むところから始め、コンソール、文字列と数値、let と const、データ型、型変換、比較・論理・三項・null 合体演算子を学ぶ全 23 レッスン(335 分)の入門コースです。最後は、変数と式を使ってプロフィールの見出し用の値を組み立てます。if 文、配列とループ、DOM 操作は後続コースで扱います。

1
はじめての JavaScript
01. HTML に JavaScript を読み込む5分
02. console.log で表示する15分
03. 文字列を連結する15分
04. 四則演算15分
05. コメントで意図を残す15分
06. エラーを読んでみる15分
07. つくる 起動メッセージ20分
08. 第1章まとめクイズ10分
2
変数とデータ型
01. let と const を使い分ける15分
02. typeof で型を調べる15分
03. 型を変換する15分
04. 真偽値と falsy な値15分
05. null と undefined を見分ける15分
06. テンプレートリテラル15分
07. つくる プロフィールを変数にする20分
08. 第2章まとめクイズ10分
3
演算子と式
01. 比較演算子と ===15分
02. 論理演算子と短絡評価15分
03. 三項演算子で簡潔に15分
04. ?? で既定値を用意する15分
05. 演算子の優先順位15分
06. つくる 表示名を決める20分
07. 第3章まとめクイズ10分

null と undefined を見分ける

null と undefined
解説

このレッスンで分かること

  • undefined は「まだ値が入っていない」、null は「意図的に空にした」を表します
  • typeof null は "object" になるため、typeof では null を見分けられません

空欄が 2 種類あって見分けがつかない

プロフィールの項目を確認していると、値が入っていない欄に undefined と出たり null と出たりします。多くの言語では「値が無い」を表す値は 1 つですが、JavaScript には 2 つあり、意味も生まれ方も違います。

undefined は、まだ値が入っていない状態です。JavaScript が自動的に置いていきます。null は、意図的に空にした状態です。誰かが自分の手で書かないと現れません。

JavaScript

let avatarUrl; console.log(avatarUrl); // undefined 宣言しただけの状態 avatarUrl = null; // 画像は設定しないと自分で決めた console.log(avatarUrl); // null

undefined が現れるのは、変数を宣言して値を入れていないとき、関数の引数を渡さなかったとき、そしてオブジェクトに無い項目を読み出したときです。どれもエラーにはならず、静かに undefined が入ります。

null が現れるのは、開発者が書いたときと、一部の組み込み機能が「見つからなかった」を返すときです。画面から要素を探す機能は、該当する要素が無いと null を返します。

自己紹介の欄をまだ作っていないなら undefined、欄はあるけれど入力しないと決めたなら null です。前者はシステムの都合、後者は人の意思です。

解説

覚え方 undefined は JavaScript が置いていくもの、null は開発者が置くもの。この視点で区別すると迷いません。

typeof では見分けられない

型を調べる typeof は、この 2 つのうち片方でつまずきます。

JavaScript

console.log(typeof undefined); // "undefined" 素直な結果 console.log(typeof null); // "object" オブジェクトと同じ結果

typeof null が "object" になるのは、JavaScript が生まれた初期の実装上の間違いです。直すと既存のサイトが壊れてしまうため、互換性のために残されました。仕様として直せなかった、という歴史的な事情による例外です。

この 1 点があるせいで、typeof では null とオブジェクトを区別できません。null かどうかを知りたいときは、型名ではなく値そのものを === null で確かめます。

JavaScript

const avatarUrl = null; console.log(avatarUrl === null); // true console.log("" === null); // false 空文字は null ではない console.log(0 === null); // false 0 も null ではない

空文字も 0 も、真偽値としては偽になる仲間ですが、null そのものではありません。前のレッスンの falsy 判定と null の判定は、別の質問だと考えてください。

自分で書くときはどちらを選ぶか

場面使う値理由
値をまだ決めていないundefined自然に発生する状態に任せる
空だと決めたnull意思を持って空にしたと伝わる
サーバーに送るnullJSON では undefined が消える

最後の行は実務でよく効きます。JSON.stringify() は undefined の項目を出力から取り除きますが、null はそのまま残します。サーバーに「この項目を空にする」と伝えたいなら null を使う必要があります。

よくある間違い

多いのは、undefined を文字列の "undefined" と混同するケースです。

JavaScript

let bio; console.log(bio === "undefined"); // false 文字列ではない console.log(bio === undefined); // true

console.log の表示は同じ見た目でも、引用符が付いていない undefined は値そのものです。画面に出た文字だけで判断せず、typeof で型を確かめる習慣を付けてください。

要件

  1. 関数名は isNullField、引数は value (任意の値) の 1 つ
  2. value = null の結果をそのまま返す。 は使わない
  3. 戻り値は true または false の真偽値

入出力例

isNullField(null) → true isNullField() → false isNullField("") → false isNullField(0) → false isNullField("山田 太郎") → false

ヒント

比較の結果はそのまま真偽値なので、value === null をそのまま return できます

typeof value === "object" では判定できません。typeof null は object になるためです

== を使うと undefined も true になってしまいます。等号は 3 つ書いてください

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • テンプレートリテラル

    バッククォートで囲んだ文字列に変数を埋め込む書き方を学びます。改行を含む自己紹介文を読みやすいコードで組み立てられるようになります。

  • つくる プロフィールを変数にする

    第2章の総まとめです。宣言から型変換、真偽値の判定、文面の組み立てまでを 1 本の関数で通して書きます。

  • 第2章まとめクイズ

    第2章で学んだ let と const の使い分け、typeof、型変換、falsy な 6 つの値、null と undefined の違いを 5 問で確かめます。

  • 比較演算子と ===

    ふたつの値が等しいかを判定する演算子を学びます。== は型を変換してから比べるため、=== を使うのが現代の JavaScript の基本です。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • JavaScriptWeb で動的な振る舞いを担う言語
  • 変数データに名前をつけて参照する仕組み
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
  • オブジェクトキーと値のペアで構造を作るデータ
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • applicationJSON 本文を送るときの Content-Type
  • 判断YES/NO 分岐を表す菱形
main.js
学習モード
エディタを読み込んでいます

メモ

null と undefined を見分ける

⌘S で保存