JavaScript类型检测方法和区别

typeof 操作符

可以判断number,string,undefined,boolean,function,object,symbol七种类型。不能判定Array。
实现原理:通过变量的机器码的低1-3为判断
问题

  • 由于null的机器码为全零,object的机器码低三位也是0,所以会把null判定为object
  • 对于object类型,只能判定为object,不能判断为具体是哪种object
  • Array只能判定为object

instanceof

用于判断一个实例A是否属于某个类型B
原理:查找实例A的原型链(即隐式原型__proto__),如果B的原型对象(即prototype)出现在了实例的原型链上就返回true。如果一直找到Object.prototype.proto (其值为null)也没有找到B.prototype就返回false
问题:判断数组时,A和B需在同一全局作用域,如果页面中存在多个框架,那么在一个框架中判断另一个框架的数组是不是instanceof Array时会返回false,因为Array是window的属性

Object.prototype.toString.call()

解决了全局作用域的问题,可以判定Number,Array,nudefined,null,Function,RegExp,String
但是只能判定原生的构造函数,如 对于自定义的构造函数,只能返回[object object]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值