全世界最短IE斷定if(!+[1,])的解釋

<script type="text/javascript">
alert([1,2]);//至關於alert([1,2].toString()); --這在IE與非IE上都相同,都會彈出"1,2"
alert([1,]);//至關於alert([1,].toString());--在非IE的標準瀏覽器上,js引擎會自動刪除最後的",",因此在IE上會彈出"1,",而在非IE上會彈出"1"
alert(+[1,]);//根據上面的解釋,這一句在IE上至關於alert(+"1,"),而在非IE上至關於alert(+"1"),正號的做用在於試圖將字符串轉換爲數字,"1,"固然不是數字,而"1"能夠轉換爲數字1,因此最終的結果:IE上會轉換失敗彈出"NaN",而非IE瀏覽器上會彈出數字"1"
 
//上面的+號轉換字符串爲數字的測試
var s = +"5";
alert(s+1);
 
//ok,到這裏爲止,咱們知道 +[1,] 最終在IE爲上NaN,在非IE瀏覽器上則爲數字1
 
//下面再來看看頗有個性的NaN
alert(NaN==true);//彈出 false
alert(NaN==false);//彈出 false
alert(NaN==NaN);//彈出 false
 
//即NaN無論與誰比較都是false
alert(!NaN);//至關於alert(!(NaN==true)),根據上面的解釋固然是彈出true
 
 
//因此,alert(!+[1,]) 最終在IE上會彈出"true",下面再來看看firefox等非IE瀏覽器上的表現
alert(new Boolean(0));//false
alert(new Boolean(1));//true
alert(new Boolean(-1));//true
//即:數字0會轉換爲false,其它任何數字都會轉換爲true,因此最終在非IE瀏覽器上最終等效於:
alert(!1);
//即
alert(!true)//最終會獲得false
 
//綜上所述:下面的這個判斷就能斷定瀏覽器是否是IE
if (!+[1,]){
    alert("我是貨真價實的IE瀏覽器!")
}
else{
    alert("我不是IE!")
}
</script>

注:隨着時間的推移,IE9及以上版本已經修復了該BUG(除非設置成兼容模式),這一點在司徒的原文回覆中也已經有人指出了。檢測IE的方法有不少種,不必定非得用這種奇淫技巧,原文回覆中,司徒還給出了另外一種方法javascript

if ((!window.VBArray)){
                alert("Not IE");
            }
            else{
                alert("IE");
            }
相關文章
相關標籤/搜索