首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS魔法堂:再识instanceof

    一、Breif                                  大家都知道instanceof一般就是用来检查A对象是否为B类或子类的实例。...那问题是JS中没有类的概念更没有类继承的概念(虽然有构造函数),那么instanceof到底是怎样判断A对象是B构造函数的实例呢?本文将对此作分析记录,以便日后查阅。...ShiftExpression的实际值(GetValue(Evaluate(ShiftExpression)))必须为[object Function],否则就抛TypeError异常; 2. instanceof...上面的定义看得不太明白,我们把它翻译成JS的实现吧 // IE5.5~9下,由于无法通过__proto__访问对象的Internal Property [[Prototype]],因此该方法无效 ;(function...五 、Conclusion                           之前看了很多讲述instanceof的文章但始终对它理解得不透彻,看来还是看Spec比较实在。

    1K90

    JS 原生方法原理探究(五):如何实现 instanceof?

    这是JS 原生方法原理探究系列的第五篇文章。本文会介绍如何实现 instanceof 方法。 typeof 操作符返回一个表示数据类型的字符串,它可以应付常规场景下的数据类型判断。...但使用 instanceof 之后,就一目了然了: console.log(obj1 instanceof F1) // true console.log(obj1 instanceof F2)...// false console.log(obj2 instanceof F2) // true 根据 MDN 的描述: instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上...instanceof 运算符有两个操作数,左操作数通常是一个实例对象,它的类型可以是对象或者函数,也可以是基本类型(这种情况下不会报错,但总返回 false),右操作数通常是一个可调用的(callable...那么 instanceof 的实现原理是什么呢?

    2.1K20

    JS手撕(一)    类型判断、instanceof、数组去重

    JS手撕(一)    类型判断、instanceof、数组去重 前言 看这篇文章的小伙伴,建议看完每一节,都尝试自己手撕一遍,最好就是弄懂原理后再开始手撕(不要边看边手撕,会产生依赖),本人就是看别人的文章后手撕的...(因为手撕题型记不住,还有一些大佬有很有意思的解法) 类型判断 有用过JS一段时间的小伙伴应该对typeof比较属性,我们需要进行类型判断的时候一般都会先想到它。...但是呢,它有一个很大的局限性,比如如果是null、array都会被认为是object,array是因为是一个特殊的对象,而null则是因为JS诞生以来null的实现导致的。...上面已经有小小的提到的typeof,那么当然不能拉下它的好兄弟instanceof啦。...开始手撕之前,先复习一下instanceof究竟是啥。 MDN上的介绍已经很简单易懂了:instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。

    2.1K10

    typeof和instanceof的区别

    JS里面判断数据类型,一般用typeof或者instanceof两种方法,那么,两者到底有什么区别呢? 1. typeof typeof用于基本数据类型的类型判断,返回值都为小写的字符串。...instanceof 利用原型链继承关系做判断,它针对对象类型(格式:对象 instanceof 构造函数)。...“尽管instanceof 运算符的右操作数是构造函数,但计算过程实际上是检测了对象的继承关系,而不是检测创建对象的构造函数 ”(摘自《JavaScript权威指南》) 2.1 原型对象 一旦创建一个新函数...prototype.png 这时根据用instanceof做类型检测,结果如下: instance instanceof SubType === true instance instanceof SuperType...小结 typeof用于基本数据类型的类型判断,无法甄别对象具体类型(除了function); instanceof用于对象的类型判断,基于原型链上的继承关系; (感谢@文兴的发现,文章于2017-3-6

    98440
    领券