js判断是否是IE浏览器的几种方法

<script> 
if(!+[1,])alert("这是ie浏览器"); 
   else alert("这不是ie浏览器"); 
</script>

此方法是传说中的最简单的判断方法噢!

但是要注意的是:此判断方法在ie11下,不支持!

如:

<script type="text/javascript">
  alert(+[1,]);
</script>

结果:输出1 → 是非ie
        输出NaN →是ie (而ie11果然不支持这个NaN判断)

 

 

其实有很多判断的方法,大都是根据浏览器的特性来的。

比如库prototype的方法是:!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1) 。就是根据ie支持window.attachEvent添加侦听事件,非ie用window.addEventListener添加侦听事件来判断的。navigator.userAgent.indexOf('Opera') === -1是因为opara浏览器能伪装成ie.如果!!(window.attachEvent )为真,就是ie;反之,如果!window.addEventListener为真,也可以判断为ie.

Ext使用的是!"1"[0],他利用IE无法使用数组下标访问字符串的特性来判断。在ie8下好像有问题。

在!+[1,]还未被发现前,判断ie最短的表达式是 !+"\v1".它利用的是ie不支持垂直制表符的特性。

以前还有一个常用方法是document.all,由于opera浏览器能伪装成ie。可以这样写:!!(document.all && navigator.userAgent.indexOf('Opera') === -1).

还有很多,先记这几条,便于工作时查阅。

1.+[1,]

2.!+"\v1"

3.!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1)

4.!!(!window.addEventListener&& navigator.userAgent.indexOf('Opera') === -1)

5.!!(document.all && navigator.userAgent.indexOf('Opera') === -1)

6.[if IE]  [endif] 实例:<!--[if IE]><script scr="excanvas.js"> </script><![end if]-->

 

全世界最短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>

 

 

 

 

 

posted @ 2013-11-28 15:59  hanyingme  阅读(5323)  评论(0编辑  收藏  举报