- typeof: 检测数据类型的运算符
返回结果包括number、boolean、string、symbol、object、undefined、function等7种基本数据类型,但对于引用数据类型不能实现精确的检测
- instanceof: 检测某个实例是否属于这个类
测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,只要其原型链上有,结果就为true,例如
[] instanceof Array; -> true
[] instanceof Object; -> true
但是对于基本数据的字面量创建方式不能检测出来,也不能检测null和undefined,比如:
1 instanceof Number; -> false
New Number(1) instanceof Number; -> true
- === 严格运算符
只能用于判断null和undefined,因为这两种类型的值都是唯一的
- constructor: 获取当前实例的构造器
所有对象都会从它的原型上继承一个 constructor 属性,但对象的原型是可以修改的,例如:
function Fn(){};
Fn.prototye = new Array();
var f = new Fn();
console.log(f.contructor === Array); -> true
console.log(f.contructor === Fn); -> false
- Object.prototype.toString.call: 获取当前实例的所属类信息
对于上述检测方法的缺点,该方法都可以一一补足。
对于基本数据类型:
Object.prototype.toString.call(1)
"[object Number]"
对于引用数据类型:
Object.prototype.toString.call([])
"[object Array]"
修改原型:
function Fn(){};
Fn.prototye = new Array();
Object.prototype.toString.call(Fn)
"[object Function]"
其中第一个object表示当前实例是对象数据类型的(固定死的),第二个表示具体属于哪个类的一个实例。
利用这一方法实现一个监测数据类型的方法
网友评论