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];
段々とワケ分かんなくなってきましたな。