2012-07-27 8 views

答えて

6

古いInternet Explorerを検出するためのハックです。 -[1,]は最新のブラウザでは-1です(false!)が、古いIEではNaNが無効になります(true)。正しい結果を返す最初のバージョンはIE9です。数に

-[1, ]結果-1:

+0

本当に - ['document.execCommand(" BackgroundImageCache "、false、true)'](https://encrypted.google.com/search?q=BackgroundImageCache)は、IE互換のハックとして広く使われているようです。 – apsillers

+0

私には '! - [1、]'はクロムで 'false'を返しますが、IE9でも' true'を返します。 –

+0

@DavidHedlund私はあなたが互換モードを持っていると思います。または、ページをクォークモードでレンダリングします。 IE9は非常に優れたEcmascriptサポートを持っていますし、Chromeと同じ結果を返さなければなりません。 – duri

4

正確なコードは false以外の何も返されないので、入力したとおりに無意味です。私はこれがレンダリングされた出力であり、サーバ側の変数によっては時々異なるかもしれないと仮定します。

window.XMLHttpRequestを使用しているのを見て、私はブラウザチェックのいくつかの貧弱な形態かもしれないことに気付きました。 [1,]は配列を作成しますが、末尾のコンマはChromeとInternet Explorerで配列を別々に扱います。 Chromeはこれを暗黙的に数値にキャストできる1つの数値の配列として認識しますが、IEは数字にキャストできない2つの項目を含む配列と見なします。

-[1,0]は、すべてのブラウザでNaNとなります。 -[1]はすべてのブラウザで-1となります。したがって、-[1,]は、他のブラウザでNaNをIEで(したがってコードを実行して)、-1で(コードを実行しないで)生成します。

これはひどいハックです。それを使用しないでください。

window.XMLHttpRequestが動作するかどうかを調べるには、それ以外のテストではなく、具体的にテストしてください。

+0

です。ありがとう。私はこのハックのために新しいです。 – acjialiren

0

、これは特に悪いコードです。

!-[1, ]は常にfalseです。

[]は配列を意味するので、これは悪いです。その配列に複数の値があると、-はあなたにNaNを与えます。

関連する問題