簡潔短小的 JavaScript IE 瀏覽器判定代碼

來源:互聯網
上載者:User

這個目前世界上最短的 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 ie//@cc_on=1;
// Variation (shorter variable):
var ie = '\v'=='v';
/ / Option to Gareth Hayes (former record-holder):
var ie = !+"\v1";
</ script>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.