简述 JavaScript 中 instanceof 运算符

简述JavaScript 中 instanceof 运算符

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,即用于检查一个对象是否属于某个特定的构造函数或其子类。其基本语法如下:

object instanceof constructor

其中,object 为要检查的对象,constructor 是构造函数。如果 objectconstructor 的实例,返回 true,否则返回 false

下面是一个使用 instanceof 运算符的示例代码:

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
}

const person = new Person("DevPoint", 30);
console.log(person instanceof Person); // true

在上面的示例中,定义了一个 Person 类,然后创建了一个 Person 类的实例 person。使用 instanceof 运算符检查 person 是否是 Person 类的实例,返回 true

下面来看一个稍微复杂一点的示例:

class Animal {}

class Dog extends Animal {}

const dog = new Dog();

console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
console.log(dog instanceof Object); // true
console.log(dog instanceof Array); // false

在上面的例子中,定义了一个 Animal 类和一个 Dog 类,Dog 类继承自 Animal 类。然后创建了一个 dog 对象,然后分别使用 instanceof 运算符检查它是否是 DogAnimalObjectArray 类型的实例,结果如注释所示。

上述代码的流程图如下所示:

JavaScript 中 instanceof 流程图

instanceoftypeof 有什么区别?

instanceof 运算符和 typeof 运算符都是 JavaScript 中用于检测数据类型的方法,但是它们的作用和使用方式是不同的。

instanceof 运算符用于检查一个对象是否属于某个类或其子类的实例。语法为 obj instanceof Class,其中 obj 是待检查的对象,Class 是一个类的构造函数。如果 objClass 的一个实例或者是 Class 的子类的实例,那么 instanceof 运算符就会返回 true,否则返回 false。这种方法主要用于检查对象的继承关系,例如检查一个对象是否是某个类的实例,或者检查一个对象是否是 ArrayDate 等内置类的实例。

typeof 运算符用于检查一个值的数据类型。语法为 typeof value,其中 value 是要检查的值。返回值为一个字符串,表示 value 的数据类型。如果 value 是一个对象或者数组,那么返回值为 object。这种方法主要用于检查基本数据类型,例如检查一个变量是否为字符串、数字、布尔值等。

因此,instanceof 运算符和 typeof 运算符的作用和使用场景是不同的,需要根据具体情况选择合适的方法。