「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战」
js数据类型可分为两类:
1.值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol、BigInt。
2.引用数据类型:对象(Object)、数组(Array)、函数(Function)。
检测方法:
(1).typeof:
在判断基础类型时,如果值为null,则返回object,其余值则返回正确类型,string,boolean,number等类型
在判断引用数据类型时,如果值为Function,返回function,其余值都返回object
适用于: 判断除null外的基础类型
(2).instanceof:
用于判断实例对象的原型链上是否有构造函数的prototype属性,可以用于检测一个值是否是另一个值的实例,要注意instanceof 检测的是原型对象
用法:
obj instanceof Object
instanceof返回值为true或false,不适用判断原始类型的值,只能用于判断对象是否从属关系。可以判断一个变量是否某个对象的实例而且也可以用于继承关系判断。可以判断一个实例是否正确属于它的父类型
补充:
[] instanceof Array 为 true 因为[]和Array.prototype属于同一条原型链,所以时从属关系,返回true
[] instanceof Object为 true Object由于原型链会一直向上查找,直到返回null,[]和Object也是同属于原型链,返回true
(3).constructor
用法:
''.constructor == String true
.constructor的原理也是依赖于原型链,每一个构造函数都可以通过constructor来访问它的构造函数
注意:
由于undefined和null是无效的对象,因此是没有constructor属性的,这两个值不能用.constructor方法判断
(4)Object.prototype.toString.call('')
toString()是 Object 的原型方法,调用Object.prototype.toString()方法,可以返回对象的类型,格式为[object Object]
而对于除Object类型外的其他类型来说,就需要调用 call / apply 来调用才能返回正确的类型信息,如[object String]
用法:
console.log(Object.prototype.toString.call("Hello"));//[object String]
区别:
- typeof 适用于判断除null外的基础类型,和引用类型中的Function类型
- instanceof 适合检测自定义对象,也可以用来检测原生对象,还可以用于判断实例和父类型
- constructor 基础类型除null和undefined外都可以判断,可以判断所有引用数据类型
- Object.prototype.toString.call('')能判断所有类型