如何判断数据类型

前言:
众所周知,js数据类型有基础数据类型和引用数据类型

  • 基础数据类型
    string,number,boolean,null,undefined symbol(es6新增,表示独一无二的值),Bigint(es10新增)(BigInt数据类型提供了一种方法来表示大于2^53-1的整数)

  • 引用数据类型
    object ,function , array
    检测的方法有 typeof, instanceof , Object.prototype.toString.call()

typeof 3 //"number"
typeof '2' //'string'
typeof true//’boolean'
typeof undefined//'undefined'
typeof function (){}  //'function'
typeof [] //'object'
typeof {} //'object'

//对null判断结果是object,这也是typeof不足之处

instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型

console.log(2 instanceof Number) //false
console.log("hello" instanceof String) //false 
console.log([] instanceof Array) //true 
var aa=function(){}
console.log( aa instanceof Function)//true 
var ss={}
console.log(ss instanceof Object) //true

constructor (constructor 属性返回数组的构造函数)虽然都可以判断基础类型和引用类型,但是里面有个坑,就是创建一个对象,更改它的原型,constructor就变得不可靠了

function Fn(){};
 
Fn.prototype=new Array();
 
var f=new Fn();
 
console.log(f.constructor===Fn);    // false
console.log(f.constructor===Array); // true 

Object.prototype.toString.call()都可以检测,比较全面


Object.prototype.toString.call(1)//[object Number]
Object.prototype.toString.call("1")//[object String]
Object.prototype.toString.call(ture)//[object Boolean]
Object.prototype.toString.call(null)//[object Null]
Object.prototype.toString.call(undefined)//[object Undefined]
Object.prototype.toString.call(/123/g)    //"[object RegExp]"
Object.prototype.toString.call(new Date()) //"[object Date]"
Object.prototype.toString.call([])       //"[object Array]"
Object.prototype.toString.call(function(){})//[object Function]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值