typeof ()
返回结果为字符串。
这个方法适用于基本类型的检测,引用类型检测只能反映出是对象,不能检测出具体是什么类型的对象。
- 基本类型
- string,number,boolean,undefined可以正确检测。
- null检测结果是object。null是空对象指针,变量不指向任何对象。需要回收的对象就设置为null。
-
引用类型
- 对象,数组,正则,日期检测结果都是object。
- 函数检测结果是function。
Symbol检测结果就是symbol。
instanceof ()
检测实例是否属于某个类。返回结果是true/false。
只要是原型链上的类都会返回true。
原型prototype/__proto__的指向可能被改变,检测结果不准确。
基本类型值返回结果都是false,不适用。
constructor ()
类似于instanceof。返回也是true/false。
由于constructor也可以改写,所以检测结果也不准确。
Object.prototype.toString.call()
检测实例所属的类。
检测数据类型最准确的方法,基本类型,引用类型都适用。
返回结果是"[object 所属类信息]"。
可以是[object Object/Array/RegExp/Function/String/Number/Boolean/Null/Undefined/Symbol]
即使prototype原型被改写也不会影响判断。
String,Number,Boolean,Symbol原型上都有:
- toString:转换为字符串
- valueof:返回原始值
Array,RegExp,Function原型上都有:
- toString:转换为字符串
Object原型上
- toString:当前实例所属的类
- valueof:返回原始值