1. typeof
可以判断出'string','number','boolean','undefined','symbol'
但判断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object'
2. instanceof
原理是构造函数的 prototype 属性是否出现在对象的原型链中的任何位置
function A() {}
let a = new A(); a instanceof A //true,因为 Object.getPrototypeOf(a) === A.prototype;
3. Object.prototype.toString.call()
常用于判断浏览器内置对象,对于所有基本的数据类型都能进行判断,即使是 null 和 undefined
Object.prototype.toString.call(null)//"[object Null]" Object.prototype.toString.call(undefined)//"[object Undefined]" Object.prototype.toString.call(Object)//"[object Function]"
4. Array.isArray()
用于判断是否为数组。
typeof运算符和instanceof运算符以及isPrototypeOf()方法的区别
typeof是一个运算符,用于检测数据的类型,比如基本数据类型null、undefined、string、number、boolean,以及引用数据类型object、function,但是对于正则表达式、日期、数组这些引用数据类型,它会全部识别为object
instanceof同样也是一个运算符,它就能很好识别数据具体是哪一种引用类型。它与isPrototypeOf的区别就是它是用来检测构造函数的原型是否存在于指定对象的原型链当中;
而isPrototypeOf是用来检测调用此方法的对象是否存在于指定对象的原型链中,所以本质上就是检测目标不同。