从原理出发理解instanceof

简介: 从原理出发理解instanceof

这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

有了typeof为什么还需要instanceof?

我们都知道typeof可以帮助我们判断数据类型,但是在判断object类型的时候typeof只能告诉我们是object但是不能告诉我们具体属于哪类object,请看下面的代码。instanceof的出现可以解决这个问题。

image.png

instanceof的实现原理

在介绍instanceof的具体用法之前,我们先看下instanceof的实现原理,从原理出发可以更好的帮助我们理解它的用法。为了让读者更好的理解代码,我们需要直到下面的预备知识。

  • Object.prototype.__proto__ === null
  • Object.prototype是一个空对象

实现instanceof的三步走战略,请大家区分好什么是原型什么是原型对象,proto指的是原型,prototype指的是原型对象。

第一步:获取左边表达式的原型

let leftProto = leftVaule.__proto__;
复制代码

第二步:获取右边表达式的原型对象

let rightProtoType = rightVaule.prototype;
复制代码

第三步:循环判断左边表达式的原型链上是否有右边的表达式

while (true) {
    if (leftProto === null) {
        return false;
    }
    if (leftProto === rightProtoType) {
        return true;
    }
    // 往左边表达式的原型链上的上一层继续查找
    leftProto = leftProto.__proto__
}
复制代码

实现instanceof

image.png

几个帮助理解instanceof的实例

function test() {}
console.log(test.__proto__ === Function.prototype); //true
Object instanceof Object // true
Function instanceof Function // true
Function instanceof Object // true
test instanceof test // false
test instanceof Object // true
test instanceof Function // true
复制代码

要想准确理解上面的实例,必须要和上面我们讲的instanceof原理进行结合,技巧就是获取左边表达式的原型和右边表达式的原型对象,判断右边表达式的原型对象是否在左边表达式的原型链上。

参考资料

浅谈 instanceof 和 typeof 的实现原理

相关文章
|
7月前
|
存储 安全 Java
从源码角度来谈谈 HashMap
HashMap的知识点可以说在面试中经常被问到,是Java中比较常见的一种数据结构。所以这一篇就通过源码来深入理解下HashMap。
83 0
从源码角度来谈谈 HashMap
|
3天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
31 13
|
1月前
|
安全 Java Python
instanceof 的实现原理
`instanceof` 是 Java 中的一个关键字,用于判断一个对象是否属于某个类或其子类。其原理是通过检查对象的类层次结构,确定该对象是否是指定类的实例。具体实现涉及对象头中的类元数据信息和类加载器的作用。
|
4月前
|
Java
【Java基础面试二十一】、说一说hashCode()和equals()的关系
这篇文章讨论了Java中`hashCode()`和`equals()`方法之间的关系,强调如果两个对象相等,它们必须有相同的哈希码,但有相同哈希码的对象未必相等,并解释了这一关系在HashSet集合中判断元素是否重复的应用场景。
【Java基础面试二十一】、说一说hashCode()和equals()的关系
理论+实践:从原型链到继承模式,掌握 Object 的精髓(二)(下)
理论+实践:从原型链到继承模式,掌握 Object 的精髓(二)(下)
|
存储 JavaScript 前端开发
理论+实践:从原型链到继承模式,掌握 Object 的精髓(一)
理论+实践:从原型链到继承模式,掌握 Object 的精髓(一)
|
存储 JavaScript 前端开发
理论+实践:从原型链到继承模式,掌握 Object 的精髓(二)(上)
理论+实践:从原型链到继承模式,掌握 Object 的精髓(二)
|
安全 Java 关系型数据库
解析 HashMap 源码:深入探究核心方法的实现与原理(下)
解析 HashMap 源码:深入探究核心方法的实现与原理(下)
98 0
|
存储 算法 安全
解析 HashMap 源码:深入探究核心方法的实现与原理(上)
解析 HashMap 源码:深入探究核心方法的实现与原理
98 0
|
算法
谈一谈|return None来看递归函数流程解析
谈一谈|return None来看递归函数流程解析
104 0

热门文章

最新文章