js判断操作系统、判断浏览器类型、判断数据类型权威方法--extjs源码

在我们日常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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值