B-Teck!

お仕事からゲームまで幅広く

【JavaScript】undefinedの判定の話

undefinedを判定する方法

1. undefinedと比較する

比較的新しめの環境であれば、これでOK。

var hoge;
hoge === undefined;

ECMAScript 5より前の環境や、処理系によっては、undefinedの書き換えが可能。
そのような環境ではundefinedundefinedであることが確実ではないので、他の方法で判定する必要がある。

2. 値が未定義であることを判定する

typeof(hoge) === "undefined";

3. undefinedを返す値と比較する

voidに何を与えてもundefinedが返されるので、下記のように判定できる。

var hoge;
hoge === void 0;

4. undefinedはfalseと判定されることを利用する

var hoge;
!hoge;

ただし、下記が全てfalseとして判定されるので、厳密には判定できない。

備考
"" 文字 空の文字列
0 数値
false 真偽値
undefined undefined
null null  

5. nullで判定する

undefinednullは比較するとこのようになる。

比較 真偽値
null === null true
undefined === undefined true
null === undefined false
undefined === null false
null == undefined true
undefined == null true

なので、undefinednullとを分けずに一緒に判定するのであればこれでいい。

var hoge;
hoge == null;

補足

JavaScriptでは未初期化の変数の値はundefinedとなる。
undefinedには2種類あり、変数が初期化されていない場合と、変数が宣言されていない場合の二種類がある。
JavaScriptには在るundefinedと無いundefinedってのがありまして。 | Ginpen.com

2は、宣言されていない変数に対しても判定ができる。
1、3、4、5はhogeが宣言されていない場合ReferenceErrorが発生する。

/* hogeを宣言せずに書いた場合、下記は全てReferenceError */
hoge === undefined;
hoge === void 0;
!hoge;
hoge == null;

参考

[JavaScript] typeof arg == 'undefined' っていらないんじゃね? / LiosK-free Blog
[JavaScript] null とか undefined とか 0 とか 空文字('') とか false とかの判定について - Qiita
JavaScript:undefined値の判定: Architect Note