js判断数据类型的四种方法

1.typeof方法

//1.
console.log(typeof(a));//undefined
console.log(typeof(undefined));//undefined
//2.
console.log(typeof(1));//number
console.log(typeof(NaN));//number
//3.
console.log(typeof(function(){}));//function
//4.
console.log(typeof(''));//string
//5.
console.log(typeof(true));//boolean
//6.
console.log(typeof({}));//object
console.log(typeof(new Object));//object
console.log(typeof([]));//object
console.log(typeof(null));//object
console.log(typeof(/\W/));//object
console.log(typeof(new Date));//object

  

总结:

1、typeof的值有6个,分别是undefined、number、function、string、boolean、object

2、引用类型(Object、Array、function、Date)除了函数,值都为object

2.Object.prototype.toString.call方法

//1.
console.log(Object.prototype.toString.call(1));//[object Number]
console.log(Object.prototype.toString.call(NaN));//[object Number]
//2.
console.log(Object.prototype.toString.call(function(){}));//[object Function]
//3.
console.log(Object.prototype.toString.call(''));//[object String]
//4.
console.log(Object.prototype.toString.call(true));//[object Boolean]
---------------------------------------
//5.
console.log(Object.prototype.toString.call({}));//[object Object]
console.log(Object.prototype.toString.call(new Object));//[object Object]
//6
console.log(Object.prototype.toString.call([]));//[object Array]
//7
console.log(Object.prototype.toString.call(null));//[object Null]
//8
console.log(Object.prototype.toString.call(/\W/));//[object RegExp]
//9
console.log(Object.prototype.toString.call(new Date));//[object Date]>
tip:如果想让Object.prototype.toString.call输出的值与typeof输出的值格式相同,可先用spilt分割成数组,然后去数组的第1个索引值,再用splice方法删除最后一位即可
如下:
console.log(Object.prototype.toString.call({}).split(" ")[1].substring(0,Object.prototype.toString.call({}).split(" ")[1].length-1));//Array
总结:

1、Object.prototype.toString.call的值有9个,分别是Number、Function、String、Boolean、Object、Array、Null、RegExp、Date。

用Object.prototype.toString.call而不用 toString的原因

1、toString为Object的原型方法,用Array ,function等类型作为Object的实例,都重写了toString方法。
2、不同的对象类型调用toString方法时,调用的是对应的重写之后的toString方法,而不会去调用Object上原型toString方法,所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型。

3.constructor/instanceof方法

用法example:
console.log([].constructor == Array);//true
console.log({}.constructor == Array);//false
console.log([] instanceof Array);//->true
console.log({} instanceof Array);//->false 
总结:
1、局限性:

用instanceof检测的时候,只要当前的这个类在实例的原型链上(可以通过原型链__proto__找到它),检测出来的结果都是true

2、基本数据类型的值是不能用constructor/instanceof来检测的
console.log(1 instanceof Number);//false
console.log([].constructor == Number);//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值