JavaScript で確実に undefined を得る方法
JavaScript における undefined は null のような予約語ではなくグローバル変数の1つなので、代入ができてしまう (最近の処理系では const 扱いになっているようだが)。
// こんなことができてしまう
undefined = 1;
少し古い IE なんかだと代入できてしまうので、世のライブラリは確実に undefined な値を拾うために色んな工夫をしている。
undefined を返す書き方
void 演算子は何を書いても undefined を返すので、これを利用することができる。underscore.js でこの書き方を見かける。
var x;
if(x === void(0)) {
// x が undefined である場合
}
void 演算子には何を渡しても良いのだが、慣例的に 0 が使われることが多い。
void(0)、void 0、void "hoge"、void {}、どれでも undefined と等価だ。
スコープ内で undefined を得る
即時関数のスコープ内で undefined を得る方法。jQuery などで使用している。
(function(a, b, undefined) { // この undefined は必ず undefined になる console.log(undefined); })(1, 2);
仮引数に値が代入されていくので、a は 1、b は 2 になるが、第3引数の undefined に対応する値は渡されていないので、スコープ内の変数 undefined は確実に undefined となる。
その他
こんな書き方でも undefined になるみたい。
var undef = [][0];
段々とワケ分かんなくなってきましたな。