类型判断

 
 
关注点:
     1.基本类型和引用类型的区分
     2.自定义引用类型的区分
     3.null  undefined
 
 
总结:
     1.typeof:   主要用来区分基本类型和引用类型
     2.instanceof:  已知引用类型构造器时,返回布尔值
     3.Object.prototype.toString.call() : 区分内置类型
     4.constructor:  返回构造函数本身
     
     
typeof
  1. 可以识别标准类型(null除外)      
  2. 不可识别具体的对象类型(Function除外)
 
 
 
instanceof

instanceof左侧为查询变量,右侧为标识对象的类      (应用于引用类型  返回时布尔值,但还需要预测其构造函数 , 不常用)

  1. 能够判别内置对象类型

  2. 不能判别基本类型  (instanceof用来判断对象构造器的,标准类型 “没” 构造器)

  3. 能够判别自定义类型
 
Object.prototype.toString.call()方法
  1. 可以识别标准类型,及内置对象类型     (返回具体类型,基本类型返回包装类型)
  2. 不能识别自定义引用类型   (均返回object)
     
  • 为了方便使用,使用函数封装如下:

function typeProto(obj) {
    return Object.prototype.toString.call(obj).slice(8,-1);
}
 

constructor

constructor指向构造这个对象的构造函数本身..  (除了null和undefined  所以类型均可识别,但是返回的是构造函数)

  1. 可识别基本类型

  2. 可识别内置对象类型

  3. 可识别自定义类型

  • 为了方便使用,使用函数封装如下:(排除了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"
 
类型判断对比表
  • 其中红色的单元格表示该判断方式不支持的类型。( 白色部分表述的结果不准确 )
posted @ 2016-09-03 16:37  阿巴阿巴55996  阅读(144)  评论(0)    收藏  举报