JS判斷IE瀏覽器的最簡短方法

 IE瀏覽器不管是什麼版本,總是跟Web標準有些不太兼容。對於代碼工作者來說,自然是苦不堪言,為瞭考慮IE的兼容問題,不管是寫 CSS 還是 JS,往往都要對 IE 特別對待,這就少不瞭做些判斷。本文不討論如何區分 IE 的樣式,僅是 JS 判定 IE 瀏覽器。

    這個目前世界上最短的 Javascript 判定 IE 瀏覽器的方法來自俄羅斯!它已經在各版本的 IE 以及目前其他流行的瀏覽器上經過測試,基於 IE 的 Bug,微軟雖然已經意識到,但是從來沒有糾正過。

    <script type='text/javascript'> 
    var ie = !-[1,]; 
    alert(ie); 
    </script> 

    以上代碼運行結果:IE 下返回true,其他標準瀏覽器返回false。!-[1,],僅僅隻有 6 bytes!
不過如果反過來判斷,標準瀏覽器返回 true 而 IE 返回 false的話,則可以再縮短一個byte。
 
    <script type='text/javascript'> 
    notIe = -[1,]; 
    if(-[1,]){ 
    // 標準瀏覽器代碼 
    }else{ 
    // IE Only的代碼 
    } 
    </script> 

    看完瞭這些,你們是不是很好奇這些是怎麼運行的?請繼續看下文。
這個 Bug 產生的原因是 IE 會添加一個空數組元素到數組元素的總數裡。
[1,]. Length標準瀏覽器會返回 1 (基於標準的 ECMAscript ,在數組最後的逗號”,”會被忽略,這是為瞭方便在一列裡顯示以及自動生成等),但是 IE 會返回 2。當你打印這個數組的時候 IE 將會返回 “1, “,也就是兩個元素,而其他標準瀏覽器將會返回 “1″。

這很容易驗證,比如在 IE 和 FF中運行以下代碼:

     <script type='text/javascript'> 
    alert([,]==','); 
    //這是8個字符判定IE 
    </script> 

    [1,]實際上瀏覽器的操作是toString()轉換成字符串的操作,-[1,]是將字符串強制轉換為數字。而 IE 將會返回 NaN,但是遺憾的是 NaN 並不是一個數字,因為[1,]轉換成字符串後的”1,”裡面帶有逗號。而其他標準瀏覽器會返回 -1,這是一個非 0 的數字。

你知道,NaN 轉換成 Boolean 型將返回 false,所以-[1,]在 IE 下將返回 false。而任何非 0 的數字轉換成 Boolean 型(例如-1),在 標準瀏覽器下都將返回 true。所以我們得到瞭一個判定結果,!-[1,]在 IE 下返回true,而在其他標準瀏覽器下返回 false。也就達到瞭區分判定 IE 瀏覽器的目的。

當然,如前文所說,這個 Bug 其實微軟很早就已經知道,但是卻一直沒有去修復它,所以在未來的 > IE8 的 IE 瀏覽器也就不確定是否依舊可以,不過基本上這麼多代的 IE 都沒有修復,未來的 IE 也不太會去修復的樣子。
以下是其他的一些區分判定 IE 瀏覽器的代碼,也可以參考下:
 

    <script type='text/javascript'> 
    // Option from Dean Edwards: 
    var ie = /*@cc_on!@*/false; 
    // Use the commented line: 
    var     // Variation (shorter variable): 
    var ie = '\v'=='v'; 
    / / Option to Gareth Hayes (former record-holder): 
    var ie = !+"\v1"; 
    </script>

發佈留言