JavaScriptを使っていると、ほぼ確実にどこかで出くわすのがundefined
です。このundefined
ですが、いろいろと扱いに面倒な点があります。
前提
文章をわかりやすくするため、undefinedな「値」については、「Undefined値」というように大文字にして「値」を付けて書きます。一方で、識別子としてのものはundefined
のように書きます。
Undefined値となるもの
以下のようなものが、Undefined値を持つ・あるいは返すものです。もちろん、意図的にUndefined値を代入することもできます。
- 宣言だけで、何も代入されていない変数
- 実引数が渡されなかった、関数の仮引数
-
void 式
という形での、void
演算子の実行結果 -
return
しなかった関数の返り値 - 存在しないプロパティへアクセスした場合の結果
undefined
という変数
じつは、undefined
は変数です。ES3ではundefined
にUndefined値以外のものを代入できてしまったのですが、ES5ではグローバルなundefined
は上書き不可となっています。ただし、ES5でもローカル変数としてundefined
を宣言することはできてしまうので、依然として注意が必要です。
確実にUndefined値が必要な場合、自分で何もしない変数・仮引数を用意する、あるいはvoid
演算子を使う、という方法があります。
Undefined値の特性
Undefined値は、以下のような特性を持っています。
//何も代入しなければUndefined値
var u;
//文字列に変換すると「undefined」
console.log('' + u);
//数値に変換すると、NaN
console.log(u - 0);
//プロパティを参照しようとするとエラーになる
console.log(u.some_property);
// null == undefined
console.log(u == null);
// typeofを取ると「undefined」
console.log(typeof u);
なお、存在しないプロパティを参照しようとするとエラーになるのは、null
とUndefined値だけに共通する性質です。