JavaScript-判断数据类型4种方式

1、typeof 

typeof 1;//number
typeof '1';//string
typeof true;//boolean
typeof undefined;//undefined

 2: toString 这个是最完美的

 Object.prototype.toString.call() 

toString()方法是Object原型上的方法,调用此方法,返回格式为[object,xxx],xxx即为判断的结果。对于Object对象可以直接调用Object.prototype.toString(),对于其他数据类型,需要通过.call()来调用

Object.prototype.toString({});//[object Object]
Object.prototype.toString.call('');//[object String]
Object.prototype.toString.call({}).replace(/\[object\s|\]/g, '') // String
Object.prototype.toString.call(1);//[object Number]
Object.prototype.toString.call(true);//[object Boolean]
Object.prototype.toString.call(undefined);//[object Undefined]
Object.prototype.toString.call(null);//[object Null]
Object.prototype.toString.call(Symbol());//[object Symbol]
Object.prototype.toString.call(new Error());//[object Error]

3:  instanceof:

  •  表达为A instanceof B,是用来判断 A 是否为 B 的实例,返回一个布尔值。
  •   instanceof 的原理是通过A对象的原型链上是否含有B类型的原型。
[] instanceof Object; //true
fn instanceof Function;//true

  由上图可以看出[]的原型指向Array.prototype,间接指向Object.prototype, 因此 [] instanceof Array 返回true, [] instanceof Object 也返回true。 

4:  constructor

JS规定每个构造函数都有一个prototype属性 ,即为构造函数的原型对象,而原型对象上会有一个constructor属性指回到构造函数,当利用构造函数创建对象时,原型上的constructor属性也会被继承到该新创建的对象上,从原型链的角度看,构造函数也代表了对象的类型

new Number(1).constructor == Number; //true
new String(1).constructor == String; //true
true.constructor == Boolean; //true
new Object().constructor == Object; //true
new Error().constructor == Error; //true

 延展知识:

 判断是否是数组的另外2种方式

[]._proto_ == Array.prototype

Array.isArray([])  es5

 参考资料:

     https://segmentfault.com/a/1190000037747875

     js判断数据类型 - 迪迪的博客 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值