js检测数据类型的四种方式
js常见的数据类型分为两种,第一种是基本数据类型(string、number、null、undefined、Boolean、Symbol、BigInt),第二种是引用数据类型(Object、Array、RegExp...)
常见的检测数据类型方式:
1)typeof
2) instanceof
3) constructor
4) Object.prototype.toString.call()
typeof
1) 定义:能够检测基本类型的符号
2)语法:typeof[value]
3) 返回值:[string、number、undefined、function、Object]
4) 缺点:1)不能够检测对象属于哪一种数据类型,例如数组对象、RegExp对象统一返回Object
2)typeof null返回的是对象(Object)
3)NaN/infinity返回的是number
instanceof
1) 定义:用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
2)语法:Object instanceof value
3) 返回值:Boolean
4) 缺点:
1 ) 无法检测基本类型,返回的都是false ,只能检测复杂数据类型
2)由于instanceof是根据原型来检测类型的,返回值也是布尔类型,因此无法直观的看出数据类型
3) 因为原型可以更改,有时候利用instanceof来判断不一定十分准确
constructor
1)定义 : 通过构造器来判断类型。
2)语法 : target.constructor == "类型名字"
3)返回值:Boolean
4)缺点:原理基本和instanceof一样,都是根据原型判断
Object.prototype.toString.call()
1) 定义 : 返回一个表示该对象的字符串。
2) 语法 : Object.prototype.toString.call(params)
3) 返回值 : "[object 类型]"