天天看点

JS中的数据类型判断

JS中的数据类型

  1. 基本数据类型

    number、string、boolean、null、undefined、symbol

  2. 引用数据类型

    object、array、function、date、regexp

    判断数据类型的方法有 typeof 、instanceof、constructor、toString()

    typeof用法

    JS中的数据类型判断

    从上面可以看出,typeof 对于JS中基本类型的判断结果还算是比较正确的,唯一的就是null返回的是object类型,其中JS中的引用类型除了对象外都是返回的function类型,如果我们创建构造函数,那么除function外其他的都是返回object类型,总之,在判断引用类型的时候避免使用typeof来判断,用他来判断基本类型还是不错的。

    instanceof

用于检测构造函数的prototype属性是否出现在某个实例的原型链上,通俗一点就是说 我们要检测的对象是否是构造函数的子孙。

JS中的数据类型判断

从上图可以看出,instanceof 只能检测构造函数,不能检测基本类型数据,而且只要检测对象是被检测对象的子孙 都返回true,否则返回false

constructor

constructor属性返回实例的构造函数,此属性的值是对函数本身的引用,而不是包含函数名称的字符串

JS中的数据类型判断

从上图可以看出,constructor比instanceof对检测数据类型的准确度更高,只是constructor无法检测null和undefined

toString.call()

toString是object上的原型方法,调用该方法默认返回当前对象的[[class]]属性,内部为【objext type】,其中type就是对象的类型,

JS中的数据类型判断

用这种方式检测除Object类型外的其他类型的时候存在不安全的情况,因为其他类型的tostring是经过重写的,对象可以重新定义[symbol.tostringtag]来改变tostring的输出结果

JS中的数据类型判断

总结:

  1. 在JS中判断基本类型就用typeof
  2. 判断引用类型 instanceof、constructor、tostring.call()都各有利弊吧,看自己情况使用

继续阅读