判断数据类型

七种数据类型:number、string、boolean、undefined、null、object、symbol

  1. typeof:Array、Date、Error、null都为Object,只能判断基础数据类型(number/string/boolean/undefined)和函数:function
  2. Object.prototype.toString.call():根据内部的this返回一个类似于这样的字符串 [object constructorName] (这个实例的构造函数的名)
  3. instanceof:[] instanceof Array构造函数的原型是不是在给定对象的原型链上,进一步判断是否在原型链上
  4. Object.prototype.isPrototypeOf([]):Object.prototype是否在[]的原型链
  5. Array.isArray()

封装一个获取变量准确类型的函数

function gettype(obj) {
  var type = typeof obj;

  if (type !== 'object') {
    return type;
  }
  //如果不是object类型的数据,直接用typeof就能判断出来

  //如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
}
为什么要用Object原型上的toString方法,和call方法?

Number、Boolean、String、Array、Function...每一个内置类都改写了Object原型上的toString方法,故表现形式不一,所以通过call改变this指向,统一使用Object原型的toString方法来判断类型

[1, 2, 3].toString()    // "1,2,3"

Array.prototype.hasOwnProperty('toString') // true

delete Array.prototype.toString            

Array.prototype.hasOwnProperty('toString') // false

[1, 2, 3].toString()                       // "[object Array]"

results matching ""

    No results matching ""