typeof和instanceof判断数据类型的原理。

console.log(typeof null);

输出什么?Obejct。
这个问题很多人都知道,但是,为什么输出的是Object?
原因就在于js在存储数据的时候,会用低位数(前三位)去存储数据类型。
其中:
000:对象
010:浮点数
100:字符串
110:布尔
1:整数
但是对于null,undefine来说,
null所有的机器码均为000与对象的前三位一致,所以就会出现误判的情况。

instanceo判断数据类型得原理就是通过原型链的查询。(附代码)

function myinstanceof(left,right){
    //左边是实例对象,右边是构造函数。
    let leftproto = left.__proto__;
    let rightprototype = right.prototype;
    while(true){
        if( leftproto == rightprototype) return true;
        if(leftproto==null)  return false;
        leftproto = leftproto .__proto__
    }
    
}

但是instance也存在一个小问题,如果简单数据类型是直接赋值而来,进行检测也会误判。

let a =1;
console.log(a instanceof Number);

输出的是fasle。
所以我们经常用其去判断是否为数组。
但是我还是更推荐用Array.isArray()去判断。
除此之外,还可以通过

const tostring = Object.prototype.toString;
   console.log(
      tostring.call(1),
  //    tostring.call([1,2,3]),
  //    tostring.call(function(){}),
  //    tostring.call({name:"lisi",age:13})
     );

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值