js类型判断

js 类型判断

typeof

typeof 一般用于判断一个变量的类型。
例如:使用typeof 判断number、undefined、symbol、string、function、boolean、bingInt、object类型。
但判断object时不能明确那种对象。

    let num = 12
    console.log(typeof num);  //number
    let und = undefined
    console.log(typeof und);  //undefined
    let str = 'test'
    console.log(typeof str);  //string
    let sym = Symbol('test')
    console.log(typeof sym);  //symbol
    let bol = true
    console.log(typeof bol);  //boolean
    let fun = function(){
        console.log('test');
    }
    console.log(typeof fun);  //function
    let bigI = 10n
    console.log(typeof bigI); //bigint
    let obj = {}
    console.log(typeof obj);  //object
    let arr = []
    console.log(typeof arr);  //object
    let nul = null
    console.log(typeof nul);  //object

注意:
基本类型除了null外都可以用typeof进行判断。

null

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。
对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 “object”。

instanceof

instanceof 运算符用来检测 construtor.prototype 是否出现在某个实例对象的原型链上。一般用来处理引用类型变量。

    let num = 12
    console.log(num instanceof Number);  //false
    let str = 'test'
    console.log(str instanceof String);  //false
    let arr = []
    console.log(arr instanceof Array);   //true
    let obj = {}
    console.log(obj instanceof Object);  //true
    let fn = function(){
        console.log('test');
    }
    let testFn = new fn()
    console.log(testFn instanceof fn);   //true
    let date = new Date()
    console.log(date instanceof Date);   //true

constructor

constructor 可以判断数据类型,也可通过其访问构造函数。
注意
undefined、null 没有constructor属性

    let num = 12
    console.log(num.constructor === Number);   //true
    let bol = true
    console.log(bol.constructor === Boolean);  //true
    let bigI = 10n
    console.log(bigI.constructor === BigInt);  //true
    let sym = Symbol('aa')
    console.log(sym.constructor === Symbol);   //true
    let str = 'test'
    console.log(str.constructor === String);   //true
    let obj = {}
    console.log(obj.constructor === Object);   //true
    let arr = []
    console.log(arr.constructor === Array);    //true
    let fn = function(){

    }
    console.log(fn.constructor === Function);  //true

Object.prototype.toString

使用该方法也可进行类型判断。

    let checkType =
     (type)=> Object.prototype.toString.call(type)
    let num = 12
    console.log(checkType(num));   //[object Number]
    let bol = true
    console.log(checkType(bol));   //[object Boolean]
    let bigI = 10n
    console.log(checkType(bigI));  //[object BigInt]
    let sym = Symbol('aa')
    console.log(checkType(sym));   //[object Symbol]
    let str = 'test'
    console.log(checkType(str));   //[object String]
    let und = undefined
    console.log(checkType(und));   //[object Undefined]
    let nul = null
    console.log(checkType(nul));   //[object Null]
    let obj = {}
    console.log(checkType(obj));   //[object Object]
    let arr = []
    console.log(checkType(arr));   //[object Array]
    let fn = function(){
    }
    console.log(checkType(fn));    //[object Function]

使用该方法可以判断基本数据类型以及引用数据类型。

类型提取

我们可以对结果进行正则将类型提取出来。

     let regex = /\[object (\w+)\]/
    let checkType = 
    (type)=> Object.prototype.toString.call(type).replace(regex,"$1").toLowerCase()
    //将结果字符串[object Number]中的Number 替换成结果即 Number 然后取小写格式
    // 根据正则能够匹配整个结果字符串,同时用()内部的字符串代替整个结果字符串
    let num = 12
    console.log(checkType(num));   // number
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值