类型识别的几种方法

类型识别方法

  • typeof
  • instanceof
  • Object.prototype.toString.call
  • constructor
typeof操作符
  • 可以识别标准类型(Null除外)
typeof 'yym'//"string" typeof 23//"number" typeof true//"boolean" typeof undefined//"undefined" typeof null//"object"没有识别的正确 typeof {name:'yym'}//"object"

类型识别的几种方法
文章图片
标准类型识别
  • 不能识别具体的对象类型(Function除外)
typeof function(){}//"function"这个识别是function typeof []//"object" typeof new Date//"object" typeof /\d///"object"function Person(){} typeof new Person//"object"

类型识别的几种方法
文章图片
具体对象类型 instanceof
  • 能够判别内置对象类型
  • 不能判别原始类型
  • 能够判别自定义对象类型和父子类型
    • 识别所有的对象类型
能够判别内置对象类型 [] instanceof Array//true /\d/ instanceof RegExp//true new Date instanceof Date//true不能判别原始类型 1 instanceof Number//false 'yym' instanceof String//false

Object.prototype.toString.call方法
  • 可以识别标准类型以及内置对象类型
  • 不能识别自定义对象类型
Object.prototype.toString.call(123)//"[object Number]" Object.prototype.toString.call('yym')//"[object String]" Object.prototype.toString.call(true)//"[object Boolean]"

从上面的代码中我们可以看到返回值是一个字符串当中的子字符串,我们来封装一个方法
function type(obj){ return Object.prototype.toString.call(obj).slice(8, -1) } type(1)//"Number" type('1')//"String" type(true)//"Boolean" type(undefined)//"Undefined" type(null)//"Null"

constructor 构造函数
  • 判别标准类型(Undefined/Null除外)
  • 判别内置对象类型
  • 判别自定义对象类型
判别标准类型(Undefined/Null除外) 'yym'.constructor === String//true (1).constructor === Number//true true.constructor === Boolean//true ({}).constructor === Object//true判别内置对象类型 new Date().constructor === Date//true [].constructor === Array//true

封装一下获取构造函数的名称
/* * 1. 入参obj如果是undefined和null,则返回其自身; * 2. 入参obj如果是其他值,则返回obj.constructor&&obj.constructor.toString().match(/function\s*([^(]*)/)[1]的结果; */ function getConstructorName(obj){ return (obj===undefined||obj===null)?obj:(obj.constructor&&obj.constructor.toString().match(/function\s*([^(]*)/)[1]); }

【类型识别的几种方法】看一个类型识别的题目
/* * 输入格式: * '2015-08-05' * 1438744815232 * {y:2015,m:8,d:5} * [2015,8,5] * 返回格式:Date */ function toDate(param){ if (typeof(param) == 'string' || typeof(param) == 'number' ){ return new Date(param); } if (param instanceof Array){ var date = new Date(0); date.setYear(param[0]); date.setMonth(param[1]-1); date.setDate(param[2]); return date; } if (typeof(param) == 'object') { var date = new Date(0); date.setYear(param.y); date.setMonth(param.m-1); date.setDate(param.d); return date; } return -1; }

    推荐阅读