我找到下面的代碼,但我不明白這一點。「 - [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,]
是在現代瀏覽器(這樣false
與!
),但NaN
在舊版IE(true
否定)-1
。第一個版本返回正確的結果是IE9。
,準確的代碼將永遠不會產生比
false
其他任何東西,從而進入它是荒謬的。我假設這是呈現輸出,並且取決於某些服務器端變量,它有時可能會有所不同。
看到因爲它使用window.XMLHttpRequest
,我意識到它也可能是一些糟糕的瀏覽器檢查形式。 [1,]
會創建一個數組,但最後的逗號將使Chrome和Internet Explorer中的數組處理方式不同。 Chrome會將其識別爲只有一個數字的數組,這可以隱式轉換爲數字,而IE會認爲它是一個包含兩個項目的數組,不能轉換爲數字。
-[1,0]
將在所有瀏覽器產生NaN
。 -[1]
將在所有瀏覽器中產生-1
。因此,-[1,]
將在IE中產生NaN
(因此執行代碼),並在其他瀏覽器中產生-1
(並且不執行代碼)。
這是一個可怕的黑客。不要使用它。
如果你想找出window.XMLHttpRequest
是否正常工作,測試對於具體的,而不是爲別的。
我明白了。謝謝。我是這個黑客的新手。 – acjialiren 2012-07-27 06:15:46
,這是特別不好的代碼:
-[1, ]
結果與數-1。
!-[1, ]
將永遠是假的。
由於[]意味着一個數組,這是不好的,因爲如果你在該數組中有多個值,-
會給你一個NaN。
確實 - ['document.execCommand(「BackgroundImageCache」,false,true)'](https://encrypted.google.com/search?q=BackgroundImageCache)似乎被廣泛用作IE兼容性黑客。 – apsillers 2012-07-27 06:08:01
對我來說,'! - [1,]'在chrome中產生'false',但在IE9中產生'true'。 – 2012-07-27 06:10:17
@DavidHedlund我想你有一些兼容模式或渲染頁面的怪癖模式。 IE9有相當不錯的Ecmascript支持,並且應該(並且對我來說)返回與Chrome相同的結果。 – duri 2012-07-27 06:12:50