7バイトでIEかどうかを判定する方法

少し前に、JScriptの条件付きコンパイルを使ってIEを判定する方法が流行りました。

var IE = /*@cc_on!@*/false;

とかやる方法ですね。

ただ、条件付きコンパイルは遅くなるだとか(信憑性は不明ですが)聞いたので使ってませんでした。

で、タイトルの方法。こう書くそうです。

var IE = !+”\v1″;

これで、IEはtrue,それ以外はfalseとなります(Opera,Safari,Firefox,Chromeで検証)。

swfObject.jsのソースを読んでたらこんなことしてるもんだから、もとネタを見たらちゃんと解説もしてありました。ちょろっと見たことを書いてみます。

→もとネタ http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html

どうやら、\vは通常のブラウザはvertical space(改行つきスペース?)の文字として認識するようで、

var IE = !(+

1

)

と認識するようですね。で、1の否定で0だからfalse。うん、納得。

しかし、IEは\vは文字列として認識するようで、

var IE = !(+v)

カッコ内の結果をisNaNしてtrueになるようです。

こんなのよく考えたなぁ、と関心しながら自分のフレームワークに取り込みました。

indexOfでuserAgent判定してたから、その分早くなったかなぁ。

・・・でもこれってJScriptの解釈のせいなのかな?IE9からできなかったりして。

そうなったら元に戻すしかないね。

You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.

20 Comments »