类型判断
关注点:
     1.基本类型和引用类型的区分
     2.自定义引用类型的区分
     3.null  undefined
总结:
     1.typeof:   主要用来区分基本类型和引用类型
     2.instanceof:  已知引用类型构造器时,返回布尔值
     3.Object.prototype.toString.call() : 区分内置类型
     4.constructor:  返回构造函数本身
typeof- 
可以识别标准类型(
null除外) - 
不可识别具体的对象类型(
Function除外) 
instanceof
instanceof左侧为查询变量,右侧为标识对象的类 (应用于引用类型 返回时布尔值,但还需要预测其构造函数 , 不常用)
- 
能够判别内置对象类型
 - 
不能判别基本类型 (instanceof用来判断对象构造器的,标准类型 “没” 构造器)
 - 
能够判别自定义类型
 
Object.prototype.toString.call()方法- 
可以识别标准类型,及内置对象类型 (返回具体类型,基本类型返回包装类型)
 - 
不能识别自定义引用类型 (均返回object)
 
- 
为了方便使用,使用函数封装如下:
 
function typeProto(obj) {
    return Object.prototype.toString.call(obj).slice(8,-1);
}
constructor
constructor指向构造这个对象的构造函数本身.. (除了null和undefined 所以类型均可识别,但是返回的是构造函数)
- 
可识别基本类型
 - 
可识别内置对象类型
 - 
可识别自定义类型
 
- 
为了方便使用,使用函数封装如下:(排除了null ,undefined)
 
function getConstructorName(obj) {    return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1] ;
}
getConstructorName(new Date());//"Date" getConstructorName(null);//null getConstructorName(12);//"Number"类型判断对比表
- 
其中红色的单元格表示该判断方式不支持的类型。( 白色部分表述的结果不准确 )
 
                    
                
                
            
        
浙公网安备 33010602011771号