JS中会使用typeof 和 instanceof来判断一个变量是否为空或者是什么类型的。数组
ES6规范中有7种数据类型,分别是基本类型和引用类型两大类函数
基本类型(简单类型、原始类型):String、Number、Boolean、Null、Undefined、Symbolcode
引用类型(复杂类型):Object(对象、Function、Array)对象
一、typeof返回结果是该类型的字符串形式表示【6】(number、string、undefined、boolean、function、object)blog
注意字符串
- typeof对于原始类型来讲,除了null均可以显示正确类型
- typeof对于对象来讲,除了函数都会显示object
二、instanceof是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,若是 A 是 B 的实例,则返回 true,不然返回 false。 在这里须要特别注意的是:instanceof 检测的是原型。 原型
例子string
[] instanceof Array; //true {} instanceof Object;//true new Date() instanceof Date;//true function Person(){}; new Person() instanceof Person; [] instanceof Object; //true new Date() instanceof Object;//true new Person instanceof Object;//true
可是instanceof能够判断出[]是Array的实例,同时也认为是Object的实例,Why????io
instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪一种类型。function
以后增长了Array.isArray()方法判断这个值是否是数组的。
总结一下:
一、typeof可以检测出了null以外的原型类型(String、Number、Boolean、Undefined),对于对象类型能判断出function、其余的都为Object
二、判断一个值是否为数组,使用Array.isArray()
三、若是须要判断一个值是否为null,最直接就是与null比较
value === null; //true or false
注意这里须要三等号操做符“===”,由于三等号操做符在进行比较的时候不会将变量强制转换为另外一种类型。
因而可知,不管是typeof仍是instanceof都不能准确判断出正确的类型。