JavaScript 判断一个数据的数据类型

        数据类型,我在上一篇(引用数据类型的浅拷贝和深拷贝)中已经简单了记录说明,这里,我就不过多的赘述,不然,我们领导又该说我:你的代码冗余度需要调整啊。这篇笔记,我会记录一些判断数据类型的方法,并且标注出来最推荐的,希望对大家有些许的帮助。

        1,typeof方法

先上代码,这里列举了一些常见的数据类型,让我们看看typeof的判断结果都是什么:

    //基本数据类型
    var str = '这是字符串'
    var num = 2021
    var bool = false
    var _null = null
    var under
    var symbol = Symbol('XXX')
    //引用数据类型
    var ary = [1,2,3]
    var obj = {name:"张三"}
    var fun = function () {
        console.log("这是方法")
    }
    var date = new Date()
    var reg = new RegExp()

    console.log(typeof str)     //string
    console.log(typeof num)     //number
    console.log(typeof bool)    //boolean
    console.log(typeof _null)   //object
    console.log(typeof under)   //undefined
    console.log(typeof symbol)  //symbol
    console.log(typeof ary)     //object
    console.log(typeof obj)     //object
    console.log(typeof fun)     //function
    console.log(typeof date)    //object
    console.log(typeof reg)     //object

 结果实锤:typeof可以检测出基本数据类型的数据类型(注意:null的检测结果是‘object’,原因是因为null的定义是 ‘ null是一个只有一个值的特殊类型。表示一个空对象引用 ’),引用数据类型除了function可以检测出,其他的都是object。

所以,如果你是简单的判断数据类型,不需要得到详细的类型。这个方法还是方便的。

        2,constructor方法

constructor是原型prototype的一个属性,当函数被定义时候,js引擎会为函数添加原型prototype,并且这个prototype中constructor属性指向函数引用。它是用来对比判断某个数据是不是某种类型,是就返回 ‘ true ’ ,否则返回 ‘ false ’;

上代码,看看constructor判断的结果:

    //基本数据类型
    var str = '这是字符串'
    var num = 2021
    var bool = false
    var _null = null
    var under
    var symbol = Symbol('XXX')
    //引用数据类型
    var ary = [1,2,3]
    var obj = {name:"张三"}
    var fun = function () {
        console.log("这是方法")
    }
    var date = new Date()
    var reg = new RegExp()

    console.log(str.constructor == String)          //true
    console.log(num.constructor == Number)          //true
    console.log(bool.constructor == Boolean)        //true
    console.log(_null.constructor == Null)          //报错
    console.log(under.constructor == Underfined)    //报错
    console.log(symbol.constructor == Symbol)       //true
    console.log(ary.constructor == Array)           //true
    console.log(obj.constructor == Object)          //true
    console.log(fun.constructor == Function)        //true
    console.log(date.constructor == Date)           //true
    console.log(reg.constructor == RegExp)          //true

结果实锤:null 和 underfined 没有constructor属性,不能用这个方法判断,但是其他的数据类型都可以判断出来。

所以,没有特殊情况的时候,这个方法比较推荐;

        3,instanceof方法

instanceof和constructor一样,也是对比判断。不过,instanceof判断某个数据是不是某个类型的一个实例,是返回 ‘ true ’ ,否则返回 ‘ false ’。

语法: object instanceof constructor ; object要检测的对象。constructor某个构造函数。

上代码,看instanceof的判断结果:

    //基本数据类型
    var str = '这是字符串'
    var num = 2021
    var bool = false
    var _null = null
    var under
    var symbol = Symbol('XXX')
    //引用数据类型
    var ary = [1,2,3]
    var obj = {name:"张三"}
    var fun = function () {
        console.log("这是方法")
    }
    var date = new Date()
    var reg = new RegExp()

    console.log(str instanceof String)          //false
    console.log(num instanceof Number)          //false
    console.log(bool instanceof Boolean)        //false
    console.log(_null instanceof Null)          //报错
    console.log(under instanceof Underfined)    //报错
    console.log(symbol instanceof Symbol)       //false
    console.log(ary instanceof Array)           //true
    console.log(obj instanceof Object)          //true
    console.log(fun instanceof Function)        //true
    console.log(date instanceof Date)           //true
    console.log(reg instanceof RegExp)          //true

结果实锤:instanceof不能用来判断null 和 underfined。原因和constructor一样。同事instanceof不判断不出来基本数据类型。但是判断引用数据类型还是可以的。

        4,Object.prototype.toString.call()方法

    //基本数据类型
    var str = '这是字符串'
    var num = 2021
    var bool = false
    var _null = null
    var under
    var symbol = Symbol('XXX')
    //引用数据类型
    var ary = [1,2,3]
    var obj = {name:"张三"}
    var fun = function () {
        console.log("这是方法")
    }
    var date = new Date()
    var reg = new RegExp()

    console.log(Object.prototype.toString.call(str) )     //[object String]
    console.log(Object.prototype.toString.call(num) )     //[object Number]
    console.log(Object.prototype.toString.call(bool) )    //[object Boolean]
    console.log(Object.prototype.toString.call(_null) )   //[object Null]
    console.log(Object.prototype.toString.call(under) )   //[object Undefined]
    console.log(Object.prototype.toString.call(symbol) )  //[object Symbol]
    console.log(Object.prototype.toString.call(ary) )     //[object Array]
    console.log(Object.prototype.toString.call(obj) )     //[object Object]
    console.log(Object.prototype.toString.call(fun) )     //[object Function]
    console.log(Object.prototype.toString.call(date) )    //[object Date]
    console.log(Object.prototype.toString.call(reg) )     //[object RegExp]

结果实锤:Object.prototype.toString.call()方法可以非常直观和准确的判断出所有数据的数据类型。使用这个方法返回的是 字符串 ,我们只要做一些简单的字符串处理,或者直接判断就可以了。所以非常推荐使用此方法。 

 打完!收工!以上便是判断数据类型的常用方法和 ‘栗子’。有需要的朋友可以借鉴一下,希望对大家有所帮助。

拜了个拜!迪迦。。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值