簡(jiǎn)潔短小的 JavaScript IE 瀏覽器判定代碼
更新時(shí)間:2010年03月21日 23:39:41 作者:
IE瀏覽器不管是什么版本,總是跟Web標(biāo)準(zhǔn)有些不太兼容。對(duì)于代碼工作者來說,自然是苦不堪言,為了考慮IE的兼容問題,不管是寫 CSS 還是 JS,往往都要對(duì) IE 特別對(duì)待,這就少不了做些判斷。本文不討論如何區(qū)分 IE 的樣式,僅是 JS 判定 IE 瀏覽器。
這個(gè)目前世界上最短的 Javascript 判定 IE 瀏覽器的方法來自俄羅斯!它已經(jīng)在各版本的 IE 以及目前其他流行的瀏覽器上經(jīng)過測(cè)試,基于 IE 的 Bug,微軟雖然已經(jīng)意識(shí)到,但是從來沒有糾正過。
<script type='text/javascript'>
var ie = !-[1,];
alert(ie);
</script>
以上代碼運(yùn)行結(jié)果:IE 下返回true,其他標(biāo)準(zhǔn)瀏覽器返回false。!-[1,],僅僅只有 6 bytes!
不過如果反過來判斷,標(biāo)準(zhǔn)瀏覽器返回 true 而 IE 返回 false的話,則可以再縮短一個(gè)byte。
<script type='text/javascript'>
notIe = -[1,];
if(-[1,]){
// 標(biāo)準(zhǔn)瀏覽器代碼
}else{
// IE Only的代碼
}
</script>
看完了這些,你們是不是很好奇這些是怎么運(yùn)行的?請(qǐng)繼續(xù)看下文。
這個(gè) Bug 產(chǎn)生的原因是 IE 會(huì)添加一個(gè)空數(shù)組元素到數(shù)組元素的總數(shù)里。
[1,]. Length標(biāo)準(zhǔn)瀏覽器會(huì)返回 1 (基于標(biāo)準(zhǔn)的 ECMAscript ,在數(shù)組最后的逗號(hào)”,”會(huì)被忽略,這是為了方便在一列里顯示以及自動(dòng)生成等),但是 IE 會(huì)返回 2。當(dāng)你打印這個(gè)數(shù)組的時(shí)候 IE 將會(huì)返回 “1, “,也就是兩個(gè)元素,而其他標(biāo)準(zhǔn)瀏覽器將會(huì)返回 “1″。
這很容易驗(yàn)證,比如在 IE 和 FF中運(yùn)行以下代碼:
<script type='text/javascript'>
alert([,]==',');
//這是8個(gè)字符判定IE
</script>
[1,]實(shí)際上瀏覽器的操作是toString()轉(zhuǎn)換成字符串的操作,-[1,]是將字符串強(qiáng)制轉(zhuǎn)換為數(shù)字。而 IE 將會(huì)返回 NaN,但是遺憾的是 NaN 并不是一個(gè)數(shù)字,因?yàn)閇1,]轉(zhuǎn)換成字符串后的”1,”里面帶有逗號(hào)。而其他標(biāo)準(zhǔn)瀏覽器會(huì)返回 -1,這是一個(gè)非 0 的數(shù)字。
你知道,NaN 轉(zhuǎn)換成 Boolean 型將返回 false,所以-[1,]在 IE 下將返回 false。而任何非 0 的數(shù)字轉(zhuǎn)換成 Boolean 型(例如-1),在 標(biāo)準(zhǔn)瀏覽器下都將返回 true。所以我們得到了一個(gè)判定結(jié)果,!-[1,]在 IE 下返回true,而在其他標(biāo)準(zhǔn)瀏覽器下返回 false。也就達(dá)到了區(qū)分判定 IE 瀏覽器的目的。
當(dāng)然,如前文所說,這個(gè) Bug 其實(shí)微軟很早就已經(jīng)知道,但是卻一直沒有去修復(fù)它,所以在未來的 > IE8 的 IE 瀏覽器也就不確定是否依舊可以,不過基本上這么多代的 IE 都沒有修復(fù),未來的 IE 也不太會(huì)去修復(fù)的樣子。
以下是其他的一些區(qū)分判定 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>
復(fù)制代碼 代碼如下:
<script type='text/javascript'>
var ie = !-[1,];
alert(ie);
</script>
以上代碼運(yùn)行結(jié)果:IE 下返回true,其他標(biāo)準(zhǔn)瀏覽器返回false。!-[1,],僅僅只有 6 bytes!
不過如果反過來判斷,標(biāo)準(zhǔn)瀏覽器返回 true 而 IE 返回 false的話,則可以再縮短一個(gè)byte。
復(fù)制代碼 代碼如下:
<script type='text/javascript'>
notIe = -[1,];
if(-[1,]){
// 標(biāo)準(zhǔn)瀏覽器代碼
}else{
// IE Only的代碼
}
</script>
看完了這些,你們是不是很好奇這些是怎么運(yùn)行的?請(qǐng)繼續(xù)看下文。
這個(gè) Bug 產(chǎn)生的原因是 IE 會(huì)添加一個(gè)空數(shù)組元素到數(shù)組元素的總數(shù)里。
[1,]. Length標(biāo)準(zhǔn)瀏覽器會(huì)返回 1 (基于標(biāo)準(zhǔn)的 ECMAscript ,在數(shù)組最后的逗號(hào)”,”會(huì)被忽略,這是為了方便在一列里顯示以及自動(dòng)生成等),但是 IE 會(huì)返回 2。當(dāng)你打印這個(gè)數(shù)組的時(shí)候 IE 將會(huì)返回 “1, “,也就是兩個(gè)元素,而其他標(biāo)準(zhǔn)瀏覽器將會(huì)返回 “1″。
這很容易驗(yàn)證,比如在 IE 和 FF中運(yùn)行以下代碼:
復(fù)制代碼 代碼如下:
<script type='text/javascript'>
alert([,]==',');
//這是8個(gè)字符判定IE
</script>
[1,]實(shí)際上瀏覽器的操作是toString()轉(zhuǎn)換成字符串的操作,-[1,]是將字符串強(qiáng)制轉(zhuǎn)換為數(shù)字。而 IE 將會(huì)返回 NaN,但是遺憾的是 NaN 并不是一個(gè)數(shù)字,因?yàn)閇1,]轉(zhuǎn)換成字符串后的”1,”里面帶有逗號(hào)。而其他標(biāo)準(zhǔn)瀏覽器會(huì)返回 -1,這是一個(gè)非 0 的數(shù)字。
你知道,NaN 轉(zhuǎn)換成 Boolean 型將返回 false,所以-[1,]在 IE 下將返回 false。而任何非 0 的數(shù)字轉(zhuǎn)換成 Boolean 型(例如-1),在 標(biāo)準(zhǔn)瀏覽器下都將返回 true。所以我們得到了一個(gè)判定結(jié)果,!-[1,]在 IE 下返回true,而在其他標(biāo)準(zhǔn)瀏覽器下返回 false。也就達(dá)到了區(qū)分判定 IE 瀏覽器的目的。
當(dāng)然,如前文所說,這個(gè) Bug 其實(shí)微軟很早就已經(jīng)知道,但是卻一直沒有去修復(fù)它,所以在未來的 > IE8 的 IE 瀏覽器也就不確定是否依舊可以,不過基本上這么多代的 IE 都沒有修復(fù),未來的 IE 也不太會(huì)去修復(fù)的樣子。
以下是其他的一些區(qū)分判定 IE 瀏覽器的代碼,也可以參考下:
復(fù)制代碼 代碼如下:
<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>
相關(guān)文章
JS數(shù)組排序技巧匯總(冒泡、sort、快速、希爾等排序)
這篇文章主要介紹了JS數(shù)組排序技巧,實(shí)例匯總了JavaScript冒泡排序、sort排序、快速排序、希爾排序等,并附帶分析了sort排序的相關(guān)注意事項(xiàng),需要的朋友可以參考下2015-11-11JS實(shí)現(xiàn)延遲隱藏功能的方法(類似QQ頭像鼠標(biāo)放上展示信息)
下面小編就為大家分享一篇JS實(shí)現(xiàn)延遲隱藏功能的方法(類似QQ頭像鼠標(biāo)放上展示信息),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12uniapp踩坑實(shí)戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js解決辦法
這篇文章主要給大家介紹了關(guān)于uniapp踩坑實(shí)戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12JS中的算法與數(shù)據(jù)結(jié)構(gòu)之字典(Dictionary)實(shí)例詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之字典(Dictionary),結(jié)合實(shí)例形式詳細(xì)分析了javascript數(shù)據(jù)結(jié)構(gòu)中字典的概念、原理、定義與常見使用方法,需要的朋友可以參考下2019-08-08將CKfinder整合進(jìn)CKEditor3.0的新方法
最新發(fā)布的CKFinder 1.4版 已經(jīng)提供了對(duì)CKEditor3.0的支持2010-01-01