js判断一个对象类型的方法

js判断一个对象的类型的方法

  1. typeof:用于判断对象的类型,返回值为字符串
    • ‘undefined’
    • ‘boolean’
    • ‘string’
    • ‘number’
    • ‘object’
    • ‘function’
    • ‘symbol’
    typeof(undefined)    //typeof 语法有两种形式
    typeof undefined     // 'undefined'
    typeof true          // 'boolean'
    typeof 'love'        // 'string'
    typeof 2             // 'number'
    typeof null       	 //'object'
    typeof []         	 //'object'
    typeof {}            //'object'
    typeof function(){}  //'function'
    
    typeof Symbol()     
    typeof Symbol('foo')
    
    缺点:无法准确判断数组类型
  2. instanceof(基于原型链)

    语法:obj instanceof Object

    表示左边对象的原型链上是否存在右边这个构造函数的prototype属性,或者左边对象是不是右边构造函数的实例化对象

    只能准确识别对象的具体类型 (Object,Array 、Function、RegExp、Date)

    返回值为Boolean

    function test(){ }
    var obj = {name:'js'}
    var reg = /\d+/;
    var date = new Date()
    
    test instanceof Function
    obj instanceof Object
    reg instanceof RegExp
    date instanceof Date
    
  3. constructor

    每个实例对象都有一个constructor属性,指向创建该对象的构造函数(对于普通对象,constructor存在于其原型对象上)

    不仅能判断基本数据类型,也能判断对象的具体类型(Array、Function、Date、RegExp)

    var num = 2;
    num.__proto__.constructor === Number
    num.constrcutor === Number
    
    var date = new Date()
    date.__proto__.constructor === Date
    date.__proto__.__proto__.constructor === Object
    date.__proto__.__proto__.__proto__.constructor === null
    date.constructor === Date
    
    

    问题:constructor属性是原型对象的属性,所以如果我改变一个对象的原型,那这种方式就不准确了

  4. Object.prototype.toString.call() 推荐(最精准的方式)

    不仅能判断基本数据类型,也能判断对象的具体类型

    function test(){ }
    var obj = {name:'js'}
    var reg = /\d+/;
    var date = new Date()
    
    //能判断对象的具体类型
    Object.prototype.toString.call(test) === '[object Function]'
    Object.prototype.toString.call(obj) === '[object Object]'
    Object.prototype.toString.call(reg) === '[object RegExp]'
    Object.prototype.toString.call(date) === '[object Date]'
    
    //六种基本数据类型
    Object.prototype.toString.call(2) === '[object Number]'
    Object.prototype.toString.call('javaScript') === '[object String]'
    Object.prototype.toString.call(true) === '[object Boolean]'
    Object.prototype.toString.call(null) === '[object Null]'
    Object.prototype.toString.call(undefined) === '[object Undefined]'
    Object.prototype.toString.call(Symbol()) === '[object Symbol]'
    
  5. 补充:判断数组还可以用**Array.isArray([])**来判断

参考链接:https://blog.csdn.net/yCharlee/article/details/52424603

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值