类型判断
关注点:
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号