类型识别的几种方法
类型识别方法
typeof
instanceof
Object.prototype.toString.call
constructor
可以识别标准类型(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;
}
推荐阅读
- 知识
- 小学英语必考的10个知识点归纳,复习必备!
- 解决SpringBoot引用别的模块无法注入的问题
- dubbo基本认识
- 21天|21天|M&M《见识》04
- “留一手”的误区认识
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 生发知识,带你深入了解
- 学习基金第五课:认识巴菲特赌输了的指数基金|学习基金第五课:认识巴菲特赌输了的指数基金 2018-10-12
- 知识付费的怪力乱象