在我们日常js编程中经常要用的判断操作系统、判断浏览器类型、判断数据类型等等的操作,一般我们会百度一下,找个方法测试通过,然后就用上了。但是心里面还是有点打鼓,这个方法能在所有情况下运行正常吗??这样简单判断能过滤所有情况吗?随便搜到的方法,还真不敢打包票。
下面的代码是我从extjs3.1的原代码中查的判断方法,大家都知道,像extjs、jQuery这样的js库兼容性还是比较好的,所有库里使用的判断方法也算一个相对来说比较权威的判断方法吧!
我简单的封装成了一个类,如果你只是简单使用其中的个别判断,可以直接copy其中的方法,如果多次使用,则可以直接下载这个源码导入到你的页面,然后evn=new Env();然后这个类就可以到处使用了。
function Env(){
var ua=navigator.userAgent.toLowerCase();
function check(r){
return r.test(ua);
}
return {
//判断环境,操作系统、浏览器、是否是https连接等
DOC : document,
isStrict : DOC.compatMode == "CSS1Compat",
isOpera : check(/opera/),
isChrome : check(/\bchrome\b/),
isWebKit : check(/webkit/),
isSafari : !isChrome && check(/safari/),
isSafari2 : isSafari && check(/applewebkit\/4/), // unique to Safari 2
isSafari3 : isSafari && check(/version\/3/),
isSafari4 : isSafari && check(/version\/4/),
isIE : !isOpera && check(/msie/),
isIE7 : isIE && check(/msie 7/),
isIE8 : isIE && check(/msie 8/),
isIE6 : isIE && !isIE7 && !isIE8,
isGecko : !isWebKit && check(/gecko/),
isGecko2 : isGecko && check(/rv:1\.8/),
isGecko3 : isGecko && check(/rv:1\.9/),
isBorderBox : isIE && !isStrict,
isWindows : check(/windows|win32/),
isMac : check(/macintosh|mac os x/),
isAir : check(/adobeair/),
isLinux : check(/linux/),
isSecure : /^https/i.test(window.location.protocol),
/**
* 是否为空,如果允许allowBlank=true,则当v=''时返回true
*/
isEmpty : function(v, allowBlank){
return v === null || v === undefined || ((this.isArray(v) && !v.length)) || (!allowBlank ? v === '' : false);
},
/**
* 是否为数组类型
*/
isArray : function(v){
return toString.apply(v) === '[object Array]';
},
/**
* 是否为日期类型
*/
isDate : function(v){
return toString.apply(v) === '[object Date]';
},
/**
* 是否为Object类型
*/
isObject : function(v){
return !!v && Object.prototype.toString.call(v) === '[object Object]';
},
/**
* 判断是否是函数
*/
isFunction : function(v){
return toString.apply(v) === '[object Function]';
},
/**
* 判断是否为数字
*/
isNumber : function(v){
return typeof v === 'number' && isFinite(v);
},
/**
* 判断字符串类型
*/
isString : function(v){
return typeof v === 'string';
},
/**
* 判断布尔类型
*/
isBoolean : function(v){
return typeof v === 'boolean';
},
/**
* 判断是否为dom元素
*/
isElement : function(v) {
return !!v && v.tagName;
},
/**
* 判断是否已定义
*/
isDefined : function(v){
return typeof v !== 'undefined';
}
}
--------------------------
如果你对java、swing、各种框架、javascript、css、linux、数据库编程等知识很感兴趣,或者正在从事这些工作,
欢迎加入我的qq技术交流群:java不瘸腿(219345774)