注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Computer Science

I Pressed My Words Here. Will You Read ?

 
 
 

日志

 
 

javascript typeOf(obj,[string]) 判断变量类型的函数  

2011-11-30 20:45:51|  分类: My Projects |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在写程序时,遇到需要细致判断变量类型,以便做具体处理。此时typeof方法变得不够用。instanceof感觉上不太优雅,于是实现了个typeOf方法。在此分享,具体用法在方法前的注释中有——几个示例。
/*
     * typeOf({},['object','string']) == true;
     *
     * typeOf({},'object) == true;
     *
     * typeOf({}) == 'Object'
     *
     * typeOf(null, 'Object') == false;
     *
     * typeOf(function(){},'function') == true;
     *
     * typeOf(undefined, 'undefined') == true;
     *
     * typeOf(null,'null') == true;
     *
     * typeOf() == 'undefined';
     *
     * typeOf(NaN) == 'NaN';
     */
var typeOf = function(obj, type) {
    /*
         * if (obj == undefined || obj == null) { if (type == undefined || type ==
         * null) { return true; } else { return false; } }
         */
    var clas;
    if(obj === undefined){
        clas = 'Undefined';
    }else if(obj === null){
        clas = 'Null';
    }else{
        clas = Object.prototype.toString.call(obj).slice(8, - 1);
        if(clas.toLowerCase() == 'number' && isNaN(obj)){
        clas = 'NaN';
        }
    }
    // 分析type的类型
    if (type != undefined && type != null) {
        if (typeOf(type) == 'Array') {
            var length = type.length;
            clas = false;
            while (length-- > 0) {
                if (typeOf(type[length], 'String') && clas.toLowerCase() == type[length].toLowerCase()) {
                    clas = true;
                    break;
                }
            }
            delete length;
        } else if (typeOf(type) == 'String') {
            clas = clas.toLowerCase() == type.toLowerCase();
        }
    }
    return clas;
    delete clas;
    delete arguments;
};


希望对大家有帮助。如果在使用中发现任何问题,还希望能给我一个反馈,谢谢。
2012年2月1日17时38分48秒更新:支持识别NaN。
-------------------------------
最近在大数据循环计算中发现了效率问题。例如:
如果以(typeOf(a,'function'))的表达方式在大数据(十万级)循环验证中,会比(typeOf(a)==='Function‘)的验证方式多消耗十毫秒。(后者只需几毫秒,前者用时十多毫秒)。不过前者表达方式优雅些,在不涉及效率问题时可以优先考虑。
Sunday, July 01 2012
-------------------------------
参考:
typeof() :http://www.w3school.com.cn/js/pro_js_primitivetypes.asp
  评论这张
 
阅读(1339)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017