js判断数据类型

ECMAScript 中的数据类型

  6种简单数据类型:Undefined, Null, Number, String, Boolean, Symbol

  1种复杂数据类型(其中又可以分为几类):Object, Array, Date, RegExp, Function, 自定义类型

判断数据类型

  1.typeof

  typeof是检测简单数据类型的最好选择。

    var bool = true
    var num = 1
    var str = 'a'
    var und = undefined
    var nul = null
    var arr = [1,2,3]
    var obj = {}
    var dat = new Date()     var fun = function(){}     var reg = new RegExp()     console.log(typeof bool); //boolean     console.log(typeof num); //number     console.log(typeof str); //string     console.log(typeof und); //undefined     console.log(typeof nul); //object     console.log(typeof arr); //object     console.log(typeof obj); //object
    console.log(typeof dat); //object
    console.log(typeof reg); //object     
    console.log(typeof fun); //function     
    
  
    通过上面的结果可以看出,检测null时返回的是object, 所以在检测简单数据类型时,typeof完全可以适用。但是检测复杂数据类型时,除了检测function时能返回function,其它复杂类型返回的都是object,无法区分。

  2.instanceof

  如果你想知道对象是不是你想检测的某种复杂类型,可以使用instanceof,自定义的类型可以用这个。

  console.log(reg instanceof Object); //true
  console.log(reg instanceof RegExp); //true  所用引用类型的值都是Object的实例,所以返回true

  3.constructor

  console.log(bool.constructor === Boolean);// true
  console.log(num.constructor === Number);// true
  console.log(str.constructor === String);// true
  console.log(arr.constructor === Array);// true
  console.log(dat.constructor === Date);// true
  console.log(obj.constructor === Object);// true   
  console.log(fun.constructor === Function);// true
  console.log(reg.constructor === RegExp);// true
  undefined和null没有contructor属性,constructor不能判断undefined和null

  4.Object.prototype.toString.call

  全面检测的最好方法

  console.log(Object.prototype.toString.call(bool));//[object Boolean]
  console.log(Object.prototype.toString.call(num));//[object Number]
  console.log(Object.prototype.toString.call(str));//[object String]
  console.log(Object.prototype.toString.call(und));//[object Undefined]
  console.log(Object.prototype.toString.call(nul));//[object Null]
  console.log(Object.prototype.toString.call(arr));//[object Array]
  console.log(Object.prototype.toString.call(dat));//[object Date]   console.log(Object.prototype.toString.call(obj));//[object Object]   console.log(Object.prototype.toString.call(fun));//[object Function]
  console.log(Object.prototype.toString.call(reg));//[object RegExp]
 
posted @ 2020-01-08 12:55  小_陈  阅读(107)  评论(0编辑  收藏  举报