JavaScriptのnullとundefinedの違いを理解する!判定の方法と正しい使い分け。
- 投稿日:2022.02.24 最終更新日:2022.08.21
- JavaScript入門
- サンプルコード, 初心者向け, 経験者向け
この記事では、JavaScriptのnullとundefinedの違いについてプログラミング初心者向けに説明する。
プログラミング言語の多くは変数を「null」もしくは「nullとnil」を使って表現し、nullとundefinedを用いて区別するのはJavaScriptの特徴的なポイントと言える。
このnullとundefinedはJS初心者にとってハマりやすいポイントであって、予期せぬエラーの原因となることも少なくない。
では、違いを見ていこう。
JavaScriptのnullとundefined
JavaScriptのnullとundefinedの違いを一言で表現すると以下のようになる。
- null ➡ 値が不在の変数。
NULLという値を持つ変数。nullリテラルの一種。
プログラムが予期できるパターン。 - undefined ➡ 値が代入・初期化されていない変数。
undefinedはJavaScriptの基本型のひとつであり、グローバルな定数とも言える。
プログラムが予期出来ないパターン。関数の返り値として使われることもある。
null/undefinedの判定方法
次にnullとundefinedの判定方法について確認したい。
nullとundefinedの判定方法
nullとundefinedの両方を検出したい場合は、次のように変数の頭に「! エクスクラメーションマーク」を付けて確認するのが手っ取り早い。
if (!value) {
console.log('nullかundefinedでは無い。');
}
ただし、この場合は変数の値が以下の場合もTRUEとして判定されてしまうので注意が必要。
- null
- undefined
- NaN
- 空のString
- 0
- false
undefinedのみ除外したい場合
nullは除外してundefinedのみを判定したい場合は以下のようにチェックする。
if (value !== undefined) {
console.log('undefinedでは無い。');
}
nullのみ除外したい場合
逆にundefinedは除外してnullのみを判定したい場合は、以下のようにする。
if (value !== null) {
console.log('nullでは無い。');
}
undefinedを代入する方法
実際に変数にundefinedを代入してif構文が想定通りに機能しているか確認したい場合は、次のように変数にundefinedを代入することができる。
let person = { name: 'Thomas' };
if (person.age === undefined) {
console.log('値はUndefinedです。')
}
null/undefinedの条件と判定
nullとundefinedを条件がプログラム上でどのように判定されるかを知るためには以下の表を見てほしい。
条件 | 判定 |
---|---|
typeof null | “object” |
typeof undefined | “undefined” |
null === undefined | false |
null == undefined | true |
null === null | true |
null == null | true |
!null | true |
isNaN(1 + null) | false |
isNaN(1 + undefined) | true |
なお、JavaScriptにおける「==」と「===」の違いは以下の通り。
- == ➡ データ型を考慮せずに値が等しいかテストする。
- === ➡ データ型が同じかどうかも含めて同じがチェックする。
undefinedが発生するパターン
JavaScriptで開発をおこなっていてundefinedが発生するパターンには大きく分けて以下の3つがある。
- 値が代入されていない
- オブジェクトのプロパティが存在しない
- 配列に指定したインデックスが存在しない
値が代入されていない
予期せぬundefinedがもっともよく発生するのが、以下のコードのように値が変数に代入されていない場合だ。
let value;
console.log(value);
ただし、こういったパターンはIDEのコンパイルチェックで検出されるので、業務においてはあまり考えなくてもいいかもしれない。
オブジェクトのプロパティが存在しない
次によく起こりうるのがオブジェクトにプロパティが存在しないパターン。
let person = { name: 'Thomas' };
console.log(person.age);
配列に指定したインデックスが存在しない
次に多いのが配列の指定したインデックスが存在していないパターン。
let cities = { 'Toko', 'Osaka' };
console.log(cities[3]);
典型的なエラーメッセージ
変数がundefinedの時に表示されるエラーメッセージにはおもに以下の2種類がある。
TypeError: ‘undefined’ is not a function
TypeError: Cannot read property ” of undefine