如题,传入一对象,如何判断是什么类型的对象?
注:typeof不能取得具体是那种类型的。

解决方案 »

  1.   

    //无奈下自己整理了一个。
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function objectType(obj) {
    var constructor = "";
    if (obj != undefined && obj.constructor != undefined) {
    // alert(obj.constructor);
    constructor = (String)(obj.constructor);
    var tokens = constructor.split(" ");
    // alert("constructor:" + constructor + "\ntokens:"+tokens);
    var size = tokens.length;
    for(var i=0; i<size; i++) {
    if(tokens[i].indexOf("function") != -1) {
    var end = tokens[i+1].indexOf("(");
    // alert(end);
    if(end == -1) {
    return(tokens[i+1]);
    } else {
    // alert(tokens[i+1].substring(0, end).length);
    return(tokens[i+1].substring(0, end));
    }
    }
    }
    }
    }
    // END objectType
    var s1 = "I am a string";
    var s2 = true;
    var s3 = 100;
    var s4 = new Date();
    var s5 = new Array();
    var s6;
    //s7;
    //alert(objectType(s1)); //string
    //alert(objectType(s2)); //boolean
    //alert(objectType(s3)); //number
    //alert(objectType(s4)); //date
    //alert(objectType(s5)); //array
    //alert(objectType(s6)); //undefined
    //alert(objectType(s7)); //undefined
    //-->
    </SCRIPT>
      

  2.   

    typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."instanceof 运算符
    返回一个 Boolean 值,指出对象是否是特定类的一个实例。result = object instanceof classfunction objTest(obj){
       var i, t, s = "";   // 创建变量。
       t = new Array();   // 创建一个数组。
       t["Date"] = Date;   // 填充数组。
       t["Object"] = Object;
       t["Array"] = Array;
          for (i in t)
          {
             if (obj instanceof t[i])   // 检查 obj 的类。
             {
                s += "obj is an instance of " + i + "\n";
             }
             else 
             {
                s += "obj is not an instance of " + i + "\n";
             }
       }
       return(s);   // 返回字符串。
    }var obj = new Date();
    alert(objTest(obj));
      

  3.   

    Web 开发常用手册JScript语言参考.rar
    http://download.csdn.net/source/308916DHTML参考手册.rar
    http://download.csdn.net/source/308913样式表中文手册.chm
    http://download.csdn.net/source/304124
      

  4.   

    参见:<script type="text/javascript">
    var getType = function(obj){
        alert(obj.constructor.toString().match(/^function\s([^\(]*?)\(\)/i)[1]);
    };getType(1);
    getType('str');
    getType(true);
    getType(new Date());
    getType([]);
    getType({});
    getType(function(){});
    </script>
      

  5.   

    null和undefined另外判断一下吧。
      

  6.   

    谢谢各位,不过现在有个另外的问题,就是重写typeof方法不好使,请教下。
    //Object.prototype.typeof = 
    //function typeofobj(obj) {
    typeof = function(obj) {
    var constructor = "";
    if (obj != undefined && obj.constructor != undefined) {
    // alert(obj.constructor);
    constructor = (String)(obj.constructor);
    var tokens = constructor.split(" ");
    // alert("constructor:" + constructor + "\ntokens:"+tokens);
    var size = tokens.length;
    for(var i=0; i<size; i++) {
    if(tokens[i].indexOf("function") != -1) {
    var end = tokens[i+1].indexOf("(");
    // alert(end);
    if(end == -1) {
    return(tokens[i+1].toLowerCase());
    } else {
    // alert(tokens[i+1].substring(0, end).length);
    return(tokens[i+1].substring(0, end).toLowerCase());
    }
    }
    }
    }
    }
    // END typeofobj
    var s1 = "I am a string";
    var s2 = true;
    var s3 = 100;
    var s4 = new Date();
    var s5 = new Array();
    var s6;
    //s7;
    //alert(typeofobj(s1)); //string
    //alert(typeofobj(s2)); //boolean
    //alert(typeofobj(s3)); //number
    //alert(typeofobj(s4)); //date
    alert(typeofobj(s5)); //array
    //alert(typeofobj(s6)); //undefined
    //alert(typeofobj(s7)); //未定义
    //-->
      

  7.   

    typeof是js的关键字,不能当作标识符,无法重写
      

  8.   

    你们判断的都不全。
    我这个才叫强大,哈哈,不信试试。
    function varType(v){
        if(typeof v==="object"){
            if(v===null)return 'null';
            if(v.constructor)
                return (v.constructor.toString()).match(/(?: )[\w\$]+/)[0];
            if(typeof typeof2==='undefined' && window.execScript){
                window.execScript('Function vbsTypeName(o):vbsTypeName=TypeName(o):End Function','vbscript');
                window.execScript('function typeof2(o){return vbsTypeName(o)}','jscript');
            }
            if(typeof typeof2!=='undefined'){
                return typeof2(v);
            }
            return "object";
        }
        return typeof v;
    }//对于普通js常量和js对象,各浏览器是基本一致的
    alert(varType()); //undefined
    alert(varType(100)); //number
    alert(varType({})); //Object
    alert(varType([])); //Array
    alert(varType(/ /)); //RegExp
    alert(varType(new Date())); //Date
    alert(varType(Date)); //function
    alert(varType(Object)); //function
    alert(varType(RegExp)); //function//对于DOM对象,各浏览器可能会有不同值
    alert(varType(window)); //IE:HTMLWindow2   FF:Window
    alert(varType(document)); //IE:HTMLDocument   FF:HTMLDocument
    alert(varType(document.body)); //IE:HTMLBody   FF:HTMLBodyElement
    alert(varType(Option)); //IE:Object    FF:function
    alert(varType(Image)); //IE:Object    FF:function
    alert(varType(navigator)); //IE:DispHTMLNavigator   FF:Navigator//以下几个只适用于IE,其他内核浏览器不支持
    alert(varType(ActiveXObject)); //IE:function
    alert(varType(Enumerator)); //IE:function
    alert(varType(new ActiveXObject("Scripting.Dictionary"))); //IE:Dictionary
    alert(varType(new Enumerator())); //IE:Enumerator
      

  9.   

    楼上的代码中有问题哦,typeof2没看到有定义,对于返回的结果也要转小写(toLowerCase()),以便协调 typeof 的结果数据。