とある最短のIE判定コード


ちょっと前まで、IEかどうかを判別する世界最短のコードは、「IEは垂直タブ(\\v)を理解しない」バグを利用した以下のコードでしたが、

'\v'=='v' // 9byte
via Ajaxian

その後 7byte 版が登場し、去年まではこれが世界最短とされていました。

!+"\v1" // 7byte
via webreflection.blogspot.com

そこで

IEでは、var ary = [1,2,]; ary.length == 3; が成立するため、これを利用したより短い判別コードを考えてみました。

[,]!=0  // 6byte(IEでtrue, IE以外でfalse)

 +[1,]  // 5byte(IE以外で1, IEでNaN)

6byte版で、世界最短かなぁ〜とか思ったのですが、念のため調べてみたら、
webreflection.blogspot.com の 2010-01-08 のコメントに、ほぼ同じようなコード片がポストされてました。

!-[1,] // 6byte(IEでtrue, IE以外でfalse)

-[1,] // 5byte(IE以外で-1, IEでNaN)

5〜6byte が限界のようです。

今年の夏ごろに登場するIE9βでは、var ary=[1,2,]; ary.length == 2 に修正されてる気がしますが、その場合は、IE5〜IE8を判定するコードとして、ブックマークレットなどで使えるかもしれません。
# これ直さないと、ES5 の Array.forEach などで問題が起きるので
IE9ppで修正されていることを確認しました。
IE9pp では var ary = [1,2,]; ary.length が 2 を返します(IE9で他のブラウザと同じ挙動に修正されました)。
ブックマークレットなんかで、IE6〜IE8を判定するのに使うといいかもね。