2012-07-27 31 views

回答

6

這是一個黑客檢測舊的Internet Explorer。 -[1,]是在現代瀏覽器(這樣false!),但NaN在舊版IE(true否定)-1。第一個版本返回正確的結果是IE9。

+0

確實 - ['document.execCommand(「BackgroundImageCache」,false,true)'](https://encrypted.google.com/search?q=BackgroundImageCache)似乎被廣泛用作IE兼容性黑客。 – apsillers 2012-07-27 06:08:01

+0

對我來說,'! - [1,]'在chrome中產生'false',但在IE9中產生'true'。 – 2012-07-27 06:10:17

+0

@DavidHedlund我想你有一些兼容模式或渲染頁面的怪癖模式。 IE9有相當不錯的Ecmascript支持,並且應該(並​​且對我來說)返回與Chrome相同的結果。 – duri 2012-07-27 06:12:50

4

,準確的代碼將永遠不會產生比 false其他任何東西,從而進入它是荒謬的。我假設這是呈現輸出,並且取決於某些服務器端變量,它有時可能會有所不同。

看到因爲它使用window.XMLHttpRequest,我意識到它也可能是一些糟糕的瀏覽器檢查形式。 [1,]會創建一個數組,但最後的逗號將使Chrome和Internet Explorer中的數組處理方式不同。 Chrome會將其識別爲只有一個數字的數組,這可以隱式轉換爲數字,而IE會認爲它是一個包含兩個項目的數組,不能轉換爲數字。

-[1,0]將在所有瀏覽器產生NaN-[1]將在所有瀏覽器中產生-1。因此,-[1,]將在IE中產生NaN(因此執行代碼),並在其他瀏覽器中產生-1(並且不執行代碼)。

這是一個可怕的黑客。不要使用它。

如果你想找出window.XMLHttpRequest是否正常工作,測試對於具體的,而不是爲別的。

+0

我明白了。謝謝。我是這個黑客的新手。 – acjialiren 2012-07-27 06:15:46

0

,這是特別不好的代碼:

-[1, ]結果與數-1。

!-[1, ]將永遠是假的。

由於[]意味着一個數組,這是不好的,因爲如果你在該數組中有多個值,-會給你一個NaN。