JavaScript で確実に undefined を得る方法

JavaScript における undefinednull のような予約語ではなくグローバル変数の1つなので、代入ができてしまう (最近の処理系では const 扱いになっているようだが)。

// こんなことができてしまう
undefined = 1;

少し古い IE なんかだと代入できてしまうので、世のライブラリは確実に undefined な値を拾うために色んな工夫をしている。

undefined を返す書き方

void 演算子は何を書いても undefined を返すので、これを利用することができる。underscore.js でこの書き方を見かける。

var x;
if(x === void(0)) {
  // x が undefined である場合
}

void 演算子には何を渡しても良いのだが、慣例的に 0 が使われることが多い。

void(0)void 0void "hoge"void {}、どれでも undefined と等価だ。

スコープ内で undefined を得る

即時関数のスコープ内で undefined を得る方法。jQuery などで使用している。

(function(a, b, undefined) { // この undefined は必ず undefined になる console.log(undefined); })(1, 2);

仮引数に値が代入されていくので、a1b2 になるが、第3引数の undefined に対応する値は渡されていないので、スコープ内の変数 undefined は確実に undefined となる。

その他

こんな書き方でも undefined になるみたい。

var undef = [][0];

段々とワケ分かんなくなってきましたな。

参考