typeof和instanceof的区分和实现原理

1、typeof

typeof是一个操作符而不是函数,用来检测给定变量的数据类型 常用于检测如下类型:

string,number,boolean,undefined,symbol

typeof原理:

不同的对象在底层都表明为二进制,在Javascript中二进制前(低)三位存储其类型信息。

  1. 000: 对象
  2. 010: 浮点数
  3. 100:字符串
  4. 110: 布尔
  5. 1: 整数

typeof null 为什么为object?

答:不同的对象在底层都表明为二进制,在Javascript中二进制前(低)三位都为0的话会被判断为Object类型,null的二进制表明全为0,自然前三位也是0,所以执行typeof时会返回”object”。

2、instanceof

判断引用数据类型

一个对象是否为某一个构造函数的实例;或者说判断一个实例是否属于某种类型

console.log({} instanceof Object) // true
// 也可以判断一个实例是否是其父类型或者祖先类型的实例
console.log([] instanceof Object) // true
console.log([] instanceof Array)  // true


function Foo() {}
let f = new Foo()
console.log(f instanceof Foo) //true

instanceof的实现原理

function instanceof2(L, R) { //L是表达式左边,R是表达式右边
    const O = R.prototype;
    L = L.__proto__;
    while(true) {
        if (L === null)
            return false;
        if (L === O) // 这里重点:当 L 严格等于 0 时,返回 true 
            return true;
        L = L.__proto__;
    }
}

instanceof2([],Object) //true

3、Object.prototype.toString.call()

一般利用原型属性来判断数据类型

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容