今天偶然看到一篇文章 typeof 和 instanceof 的区别 ,文章末尾的
console.log(Number instanceof Number);//false console.log(String instanceof String);//false
有点迷,当时想着Number和String为啥不instanceof 它们自己呢???就测试了一下Number是啥,结果他们本身是个Function!!好嘛,想了一下也是,它可以new,创建实例啥的
Object是function,后来发现Function也是Object,所以Number和String也是Object实例,如下:
typeof Object
// 'function'
Object instanceof Function
// true
Object instanceof Object
// true
Function instanceof Function
// true
Function instanceof Object
// true
String instanceof Object
// true
总结一下,几种数据类型判断:
1.typeof 可以判断简单数据类型,对于复杂数据类型就不起作用;
2.instanceof主要用于判断复杂数据类型(判断当前对象是不是另一个对象的实例)返回布尔值;
3.Object.prototype.toStringcall()能够准确的判断所有的数据类型;
4.constructor 能够判断多种数据类型,和instanceof差不多(null和undefined除外)
之前有写过这个,可以具体去看一下: JS-循环清空对象 && 判断数据类型的5种常用方法