1. typeof
适合的对象:基本数据类型
返回值枚举:number、string、boolean、undefined、symbol、bigint、object、function
原理:不同的对象在底层都表示为二进制,在Javascript中二进制前(低)三位存储其类型信息
注意:typeof null === 'object'
2. instanceof
适合的对象:引用数据类型
返回值枚举:true、false
原理:遍历左边变量的原型链,直到找到右边类型的prototype,如果查找失败,则会返回false,告诉
我们左边变量并非是右边类型的实例。
缺点:检测过程繁琐且对于简单数据类型中的undefined, null, symbol检测不出来
3. Object.prototype.toString.call
适合的对象:通用
返回值枚举:
[object String] [object Number] [object Boolean]
[object Undefined] [object Null]
[object Object] [object Function] [object Array] [object Date] [object RegExp]
原理:Object.prototype上的toString方法可以返回包含数据类型的字符串,当toString方法调用时:
1.如果this的值为undefined,则返回"[object Undefined]".
2.如果this的值为null,则返回"[object Null]".
3.让O成为调用ToObject(this)的结果.
4.让class成为O的内部属性[[Class]]的值.
5.返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.
4. constructor.name
适合的对象:引用数据类型
返回值枚举:Number/String/Boolean/Symbol/BigInt/Function/Object/Array/Date/RegExp...
原理:获取实例的构造函数,这种方法不会把原型链上的其他类也加入进来,避免了原型链的干扰
注意:不能判断null和undefined。