undefinedを判定する方法
1. undefinedと比較する
比較的新しめの環境であれば、これでOK。
var hoge; hoge === undefined;
ECMAScript 5より前の環境や、処理系によっては、undefinedの書き換えが可能。
そのような環境ではundefinedがundefinedであることが確実ではないので、他の方法で判定する必要がある。
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で判定する
undefinedとnullは比較するとこのようになる。
| 比較 | 真偽値 |
|---|---|
| null === null | true |
| undefined === undefined | true |
| null === undefined | false |
| undefined === null | false |
| null == undefined | true |
| undefined == null | true |
なので、undefinedとnullとを分けずに一緒に判定するのであればこれでいい。
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