日期:2014-05-16  浏览次数:20386 次

用双非!!来分析是否为IE(附浏览器类型JS分析函数)
语句:var isIE =!!(window.attachEvent && !window.opera);
解析:
!!是双非,一般用来做类型转换的,把一个变量的值转化成bool型,譬如!!(1) = true;代码易读.undefined,null,""等都转化成false,
因此,上面代码意为:
window.attachEvent 在IE下,返回[native code],即为true ,在FF下,返回undefined
window.opera 在IE/FF下均返回undefined.因此!window.opera转化为true,
var isIE =!!(window.attachEvent && !window.opera);意为:
在IE下时: var isIE =!!(true && true);   即var isIE=true
在FF下时: var isIE =!!(false && true);   其中(false && true)最终返回false,即var isIE=!!false 最后结果只有false 表示不是IE
这行代码可以一句在三种浏览器中选出正确一个。
附:浏览器类型JS分析代码
function Browser(){
var ua, s, i;
this.isIE = false;
this.isNS = false;
this.isOP = false;
this.isSF = false;
ua = navigator.userAgent.toLowerCase();
s = "opera";
if ((i = ua.indexOf(s)) >= 0){
    this.isOP = true;return;
}s = "msie";
if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    return;
}s = "netscape6/";
if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;return;
}
s = "gecko";
if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    return;
    }
s = "safari";
if ((i = ua.indexOf(s)) >= 0) {
    this.isSF = true;return;
}
}
调用此函数方法:
1、建立实例:
var browser = new Browser();

2、用IF来取得其属性值:
if ((!browser.isSF) && (!browser.isOP)){   //即浏览器不是safari或opera
    .......; //执行代码
}else{
    .......;
}