私は以下のコードを見つけましたが、私はこれを理解できません。" - [1、]"は "if(! - [1、] &&!window.XMLHttpRequest)"の意味ですか?
if (!-[1, ] && !window.XMLHttpRequest) {
document.execCommand("BackgroundImageCache", false, true);
}
if(!-[1,])
とは何ですか?ありがとう
私は以下のコードを見つけましたが、私はこれを理解できません。" - [1、]"は "if(! - [1、] &&!window.XMLHttpRequest)"の意味ですか?
if (!-[1, ] && !window.XMLHttpRequest) {
document.execCommand("BackgroundImageCache", false, true);
}
if(!-[1,])
とは何ですか?ありがとう
古いInternet Explorerを検出するためのハックです。 -[1,]
は最新のブラウザでは-1
です(false
と!
)が、古いIEではNaN
が無効になります(true
)。正しい結果を返す最初のバージョンはIE9です。数に
-[1, ]
結果-1:
正確なコードは
false
以外の何も返されないので、入力したとおりに無意味です。私はこれがレンダリングされた出力であり、サーバ側の変数によっては時々異なるかもしれないと仮定します。
window.XMLHttpRequest
を使用しているのを見て、私はブラウザチェックのいくつかの貧弱な形態かもしれないことに気付きました。 [1,]
は配列を作成しますが、末尾のコンマはChromeとInternet Explorerで配列を別々に扱います。 Chromeはこれを暗黙的に数値にキャストできる1つの数値の配列として認識しますが、IEは数字にキャストできない2つの項目を含む配列と見なします。
-[1,0]
は、すべてのブラウザでNaN
となります。 -[1]
はすべてのブラウザで-1
となります。したがって、-[1,]
は、他のブラウザでNaN
をIEで(したがってコードを実行して)、-1
で(コードを実行しないで)生成します。
これはひどいハックです。それを使用しないでください。
window.XMLHttpRequest
が動作するかどうかを調べるには、それ以外のテストではなく、具体的にテストしてください。
です。ありがとう。私はこのハックのために新しいです。 – acjialiren
、これは特に悪いコードです。
!-[1, ]
は常にfalseです。
[]は配列を意味するので、これは悪いです。その配列に複数の値があると、-
はあなたにNaNを与えます。
本当に - ['document.execCommand(" BackgroundImageCache "、false、true)'](https://encrypted.google.com/search?q=BackgroundImageCache)は、IE互換のハックとして広く使われているようです。 – apsillers
私には '! - [1、]'はクロムで 'false'を返しますが、IE9でも' true'を返します。 –
@DavidHedlund私はあなたが互換モードを持っていると思います。または、ページをクォークモードでレンダリングします。 IE9は非常に優れたEcmascriptサポートを持っていますし、Chromeと同じ結果を返さなければなりません。 – duri