typeof(根据二进制判断):

常用于判断基础数据类型,对于引用数据类型除了function 返回 ‘function’,其余都返回 ‘object’ (typeof null === object)

instanceof:

主要用于区分引用数据类型,检测构造函数的 prototype 属性是否出现在某个实例对象的 原型链 上

语法:object(某个实例对象) instenceof  constructor(构造函数)

不适用于简单数据类型的检测,检测过程繁琐且无法检测简单数据类型中的 undefined、null、symbol

Object.prototype.toString.call():

适用于所有的类型检测,且检测精准

语法:Object.prototype.toString.call(数据) ;返回的是该数据类型的字符串。

原理:Object.prototype.toString 表示一个返回对象类型的字符串,call() 方法可以改变this的指向,把Object.prototype.toString方法指向不同的数据类型上, 返回不同的结果

constructor(用于引用数据类型):

用于检测引用数据类型,检测方法是获取实例的构造函数,判断和某个类是否相同,如果相同就说明该数据是符合那个数据类型的

这种方法不会把原型链上的其他类也加入进来,避免了原型链的干扰

引用:https://www.nowcoder.com/exam/interview/detail?questionClassifyId=0&questionId=2412354&questionJobId=156&type=1