javascript简单区分现代浏览器和ie6,7,8

众多周知,对浏览器的检测主要分为3类:
1:能力检测 调用方法之前判断浏览器支持这个方法吗。
2:怪癖检测 根据不同浏览的特殊性为判断浏览器。
3:用户代理检测 即通过检测用户代理字符串,这个字符串可以通过navigator.userAgent获取。
下面介绍的2个方法都是怪癖检测的方法
第一种:

if(+"\v1"){
alert("现代浏览器(包含ie9)")
}else{
alert("ie6,7,8")
}


在javascript中+后跟字符串是最简单的字符转转换成数组,所有浏览器中+”v1″返回的都是NaN,+”1″返回的是1,类型为number。
至于以上代码为何能分辨ie6,7,9与现代浏览器就在于这个神奇的”\v”,对没错就是”\v”,不是”/a”,不是”/b”,也不是”/V”,就是”/v”。
具体原因我也不清楚,在ie6,7,8中”\v1″解释成”v1″,所以+”\v1″返回false。
而现代浏览器中,”\v1″都是解释成”1″,自然+”/v1″返回true。
最开始我认为是”\”这个凡斜杠的愿意,但v换成其余字母,结果都没有如”v”一样的效果。
ie6,7,8中”\v”==”v”,现代浏览器”\v”!=”v”也可以这样判断。至于”\v”的原理就期待高手来讲解。
第二种是

if(-[1,]){
alert("现代浏览器")
}else{
alert("ie6,7,8")
}


通过的ie6,7,8对这样数组[1,]的解释与现代浏览器不一样,这是ie6,7,8的bug,不过ie9已经改善过来。[1,].length在现代浏览器返回1,在ie6,7,8中返回2。
关于这个判断方法在最简洁短小的 JavaScript 判定 IE 浏览器有详细介绍。

posted @ 2012-06-28 18:11  猫200  阅读(207)  评论(0编辑  收藏  举报