js中判断数据类型的四种⽅法总结typeof array
js中判断数据类型的四种⽅法
前⾔
  在js中,我们经常需要判断数据的类型,那么哪些⽅法可以⽤来判断数据的类型呢?哪种⽅法判断数据类型最准确呢?
我们来⼀个个分析:
  typeof是⼀个运算符,使⽤⽅式有两种:1.typeof(表达式)2.typeof 变量名。返回值为表⽰类型的字符串。能判断的类型有
  Number、String、Boolean,Undefined、Object、Function、Symbol等
  实例详解:
注意最后两个typeof null和 typeof []返回的都是object。可以看出typeof并不能准确的判断出array和null。
结论:
  typeof 对对象类型的值的类型不能作出准确判断,能准确判断出基本数据类型的值!
2.instanceof
A instanceof
B 判断 A 是否为 B 的实例,如果是,则返回 true,不是则返回 false。instanceof检测的是原型,内部机制其实就是判断对象 A 的原型链中是否有 B 的原型。
  实例详解:
从上⾯的实例我们可以看出,基本数据类型的值不能⽤ instanceof 判断类型,由于undefined和null没有构造函数,所以使⽤instanceof 会报错!⽽由基本数据包装类创建的对象可以⽤ instanceof 判断类型。
结论:
  instanceof 只能⽤于判断对象,基本数据类型值不能判断,所以也不能准确的判断出所有的类型!
  当⼀个函数F被定义时,JS引擎会为F添加prototype原型,然后在prototype上添加⼀个constructor属性,并让其指向F的引⽤,F 利⽤原型对象的constructor属性引⽤了⾃⾝,当F作为构造函数创建对象时,原型上的constructor属性被遗传到了新创建的对象上,从原型链⾓度讲,构造函数F就是新对象的类型。这样做的意义是,让对象诞⽣以后,就具有可追溯的数据类型。
从实例我们可以看出:constructor判断undefined和null时,会报错。
结论:
  constructor能判断基本数据类型string、number、boolean和对象类型(array、function等等),但是它不能判断undefined和null。所以它判断类型值也不⼗分准确!
4.String.call()(最准确的判断类型的⽅法,推荐使⽤,也是⾯试官想要的答案)
  toString()是Object的原型⽅法,调⽤该⽅法,默认返回当前对象的[[Class]]。这是⼀个内部属性,其格式为[object Xxx],其中Xxx 就是对象的类型。
  对于Object对象,直接调⽤toString()就能返回[object Object],⽽对于其他对象,则需要通过call、apply来调⽤才能返回正确的类型信息。
  从实例我们可以看出该⽅法能判断基本类型也能判断 Array 和 Function。
  对于Object对象:
  实例可见,对于Object对象,可以直接使⽤ toString() ⽅法,对于其他内置对象,String.call() ⽅法都能准确的判断出其类型。
  结论:
    String.call() ⽅法是判断类型的最准确的⽅法!总结:
  要判断⼀个值的类型,最准确的⽅法就是String.call()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。