サンプルコードで理解を深める:実例を通して確認する「null」と「undefined」

2024-04-18

JavaScriptにおいて、「null」と「undefined」はどちらも「値が存在しない」ことを表す特殊な値として扱われます。しかし、その意味合いと扱い方には微妙な違いが存在します。さらに、オブジェクトとの関連性も理解しておくことが重要です。

この解説では、「null」と「undefined」の違いと、オブジェクトとの関係について分かりやすく解説します。

「null」と「undefined」の意味合い

「undefined」

  • 変数に値が代入されていない状態を表します。
  • 宣言された変数が初期化されていない場合や、関数から値を返さずに終了した場合などに発生します。
  • 意図せず発生することもあれば、意図的に利用することもあります。

「null」

  • 意図的に設定された「値が存在しない」状態を表します。
  • オブジェクトや配列などの参照が解除された際に代入されます。
  • 開発者が明示的に設定することで、論理的に「値が存在しない」ことを示すことができます。

オブジェクトとの関係

  • 自体はオブジェクトではありません。
  • オブジェクトにアクセスしようとした際に、存在しないプロパティや要素を参照した場合に返される値です。
  • オブジェクトのプロパティや要素が存在しないことを論理的に表現するために利用されます。
  • 自体はオブジェクトですが、空のオブジェクトです。
  • プロパティも要素も存在しないオブジェクトとして扱われます。
  • オブジェクトを意図的に初期化したり、存在しないオブジェクトを明示的に表現したりする際に利用されます。

その他の差異

  • typeof 演算子
    • typeof null は "object" を返します。
    • typeof undefined は "undefined" を返します。
  • 厳格な等価演算子 (===)
    • null === undefined は false です。
  • 論理演算子

使い分け

  • 変数が初期化されていない場合は、undefined を使用します。
  • オブジェクトを意図的に空の状態にしたい場合は、null を使用します。
  • オブジェクトの存在有無を判定したい場合は、typeof 演算子 を使用します。
  • 厳密な等価比較が必要な場合は、=== 演算子 を使用します。

「null」と「undefined」はどちらも「値が存在しない」ことを表す特殊な値ですが、意味合いと扱い方に違いがあります。オブジェクトとの関係も理解し、状況に応じて適切な値を使い分けることが重要です。




サンプルコード:nullとundefinedの違い

// 変数宣言
let message1;
let message2 = null;

// typeof 演算子による確認
console.log(typeof message1); // undefined
console.log(typeof message2); // object

// 厳格な等価演算子 (===) による確認
console.log(message1 === undefined); // true
console.log(message1 === null); // false
console.log(message2 === undefined); // false
console.log(message2 === null); // true

// 論理演算子による確認
if (message1) {
  console.log('message1 は存在します');
} else {
  console.log('message1 は存在しません');
}

if (message2) {
  console.log('message2 は存在します');
} else {
  console.log('message2 は存在しません');
}

出力結果

undefined
object
true
false
false
true
message1 は存在しません
message2 は存在しません

解説

  1. 変数宣言
    • message1 は初期化されていないため、undefined が代入されます。
    • message2 には null が明示的に代入されます。
  2. typeof 演算子による確認
    • typeof message1undefined を返します。これは、message1 が未定義の値であることを意味します。
    • typeof message2object を返します。これは、null はオブジェクト型として扱われることを意味します。
  3. 厳格な等価演算子 (===) による確認
    • message1 === undefinedtrue を返します。これは、message1undefined であることを厳密に意味します。
  4. 論理演算子による確認
    • message1undefined であるため、if 条件式は false となり、「message1 は存在しません」と出力されます。

このサンプルコードを通して、nullundefined はどちらも「値が存在しない」ことを表す特殊な値ですが、意味合いと扱い方に違いがあることを理解することができます。

以下のコード例は、nullundefined の使い分けをさらに詳しく説明しています。

例 1:オブジェクトの初期化

// オブジェクトを初期化する
let user = null;

// オブジェクトのプロパティを追加する
user.name = 'Taro';
user.age = 30;

console.log(user); // { name: 'Taro', age: 30 }

例 2:存在しないオブジェクトのプロパティへのアクセス

// オブジェクトを宣言する
let article = {};

// 存在しないプロパティにアクセスする
console.log(article.title); // undefined

// 存在しないプロパティに値を代入する
article.title = 'JavaScript入門';

console.log(article.title); // JavaScript入門

例 3:関数の引数と戻り値

// 引数なしで関数を呼び出す
function greet() {
  console.log('Hello!');
}

greet(); // Hello!

// 関数から値を返さない
function calculate() {
  // 処理を行う
}

const result = calculate();
console.log(result); // undefined

これらの例は、nullundefined の使い分けを理解するための手がかりとなるでしょう。状況に応じて適切な値を選択することが重要です。




概念的な理解

  • undefined は変数が初期化されていない状態を表します。

厳格な等価比較

  • 厳格な等価比較演算子 === を使用して、nullundefined を厳密に比較できます。
    • これは、nullundefined は異なる値であることを意味します。

論理演算子

  • 論理演算子において、nullundefined はどちらも論理偽の値として扱われます。
    • if (null)false と評価されます。

これらの情報を参考に、nullundefined の違いを理解し、適切に使い分けるようにしましょう。


javascript object null


Visual Studio Codeを使ってChromeでJavaScriptコードをデバッグする

ここでは、Google ChromeでJavaScriptデバッガーを起動する方法をいくつか紹介します。ChromeでデバッグしたいWebページを開きます。メニューボタン (縦 dots) をクリックし、「その他のツール」>「開発者ツール」を選択します。...


JavaScriptで配列から空要素を削除:filter、forEach、lengthなど7つの方法

filter() メソッドは、配列の各要素をテストし、テストに合格した要素のみを含む新しい配列を作成します。空要素はテストに不合格となるため、新しい配列には含まれません。上記の例では、element が空文字、null、または undefined 以外であれば、filter() メソッドは true を返し、新しい配列に要素を含めます。...


HTMLリンクの無効化:JavaScript、jQuery、HTMLを用いた詳細解説

Webサイト制作において、特定のHTMLリンクを無効化することは、ユーザーの操作を制御したり、デザイン上の意図を表現したりする上で役立つテクニックです。ここでは、JavaScript、jQuery、HTMLを用いた3つの主要な方法について、それぞれの特徴と具体的なコード例を交えて詳しく解説します。...


ReactJSでonClickイベント時に複数の関数を呼び出す:アロー関数、関数合成、イベントオブジェクト、カスタムフック

最もシンプルで汎用性の高い方法です。イベントハンドラにアロー関数を使用し、その中で複数の関数をコールバック関数として呼び出す方法です。メリット:シンプルで分かりやすいコード汎用性が高いコード量が少し増える複数の関数を1つの関数にまとめる関数合成を使用する方法です。コードを短くできますが、可読性が少し低下する可能性があります。...


React Routerでデフォルトルートを別のルートに変更する3つの方法とは?

React Router は、React アプリケーションでルーティングを管理するためのライブラリです。デフォルトルートは、ブラウザアドレスバーに何も入力されていない場合に表示されるルートです。このチュートリアルでは、React Router でデフォルトルートを別のルートに設定する方法を説明します。...


SQL SQL SQL SQL Amazon で見る



JavaScript初心者でもわかるnullとundefined

null は、意図的に値を設定していないことを表します。つまり、「空」であることを明示的に示すために使用されます。undefined は、以下のいずれかの状況を表します。 変数が宣言されているが、値が代入されていない オブジェクトのプロパティが存在しない 関数の引数が渡されていない 関数が値を返さない