LoginSignup
42
57

More than 5 years have passed since last update.

(初心者向け) JavaScript の null と undefined

Last updated at Posted at 2017-11-19

概要

Java や C# ではオブジェクトが未定義な場合、null という値が返されます。JavaScript では普通は undefined が返されますが、null が返されるときもあり混乱します。

この undefined と null ですが、値としては同じもののようで、undefined == null を実行すると true になります。でも、当然ながら undefined === null は false です。

developer.mozilla.org によると、これらはグローバルオブジェクト (Global Objects) の値の一種だそうです。これらは次の4つです。

  • Infinity (無限大)
  • NaN (非数)
  • undefined
  • null (literal)

そして、undefined は値ですが、null はリテラルだそうです。初心者としては混乱しますね。
もし、C 言語を知っていれば、次のように解釈するとよさそうです。

  • undefined は変数を宣言し、値を代入する前の状態 (メモリは確保したが、値は未確定)
  • null は NULL というシンボル (0 が割り当てられている)

C だと変数を宣言して値を代入しないと、その変数の値は確定しませんが、JavaScript ではそのような状態に undefined という値を割り当てているという感じです。そして、その値は null と同じと評価するということで、自分的には解釈しています。

判別

プログラミングで undefined と null を区別して評価するケースはあまりないものと思われますが、区別して評価するためには == でなく === を使う必要があります。

それ以外なら == で値を評価すればいいし、if 文のカッコ内に変数名だけ書いておけば判別できます。(この場合は空文字や 0 も null と同じに評価される)

// 厳密に undefined か評価するとき (null も同様)
if (a === undefined) {
  // undefined のときの処理
}

// undefined でも null でもいいから緩く評価するとき
if (b == null) {
  // undefined または null のときの処理
}

// 0 や '' も含めさらに緩く評価するとき
if (c) {
  // 処理
}

サンプル

'use strict';
/* グローバルにアクセス可能なビルトイン値。 */
/* undefined, null, NaN, Infinity */
var var1;
console.log(var1);  // undefined (メモリだけ確保したが、初期化されていない)
var1 = null;
console.log(var1);  // null (初期化されているが、型も値も決まっていない)

console.log(undefined == null);  // true (同じ値とみなされる)
console.log(undefined === null); // false (値は同じでも別ものとみなされる)

var y = 1 / 0;  // Infinity (無限大)
console.log(y);

var y0 = 0 / 0;
console.log(y0); // NaN (計算できない)

// null と表示される。
var1 = null;
if (var1) {
  console.log('有効な値');
}
else {
  console.log('null');  // こちら
}

// undefined と表示される。
var var2
if (var2) {
  console.log('有効な値');
}
else {
  console.log('undefined');  // こちら
}

if (var2 == null) {
  console.log('null');  // var2 は undefined だが null と評価
}
else {
  console.log('有効な値');
}

実行例

undefined
null
true
false
Infinity
NaN
null
undefined
null

※ JavaScript では 0 の割り算で例外が起こらなことに注意!

終わり

42
57
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
57