📅  最后修改于: 2023-12-03 15:01:37.809000             🧑  作者: Mango
在 JavaScript 中,instanceof
是一种用于判断对象是否是特定类型的运算符。它用于检查一个对象是否是另一个对象的实例,或者它的原型链中是否存在这个对象。
object instanceof constructor
object
是要判断的对象。constructor
是要检查的构造函数。function Person(name) {
this.name = name;
}
const person = new Person('Alice');
console.log(person instanceof Person); // true
在上面的示例中,我们定义了一个 Person
构造函数,并创建了一个 person
对象。通过 instanceof
运算符,我们可以判断 person
对象是否是 Person
构造函数的实例。
instanceof
运算符不仅可以检查对象是否是某个类的实例,还可以检查对象是否是某个类的子类的实例,或者是该类的任意父类的实例。
下面是一个示例,演示了原型链上的检查:
class Animal {
sound() {
console.log('Animal sound');
}
}
class Cat extends Animal {
meow() {
console.log('Meow');
}
}
const cat = new Cat();
console.log(cat instanceof Cat); // true
console.log(cat instanceof Animal); // true
在上面的示例中,Cat
类继承自 Animal
类。我们创建了一个 cat
对象,然后使用 instanceof
运算符分别检查了 cat
是否是 Cat
类的实例,以及是否是 Animal
类的实例。由于 cat
是 Cat
类的实例,同时也是 Animal
类的子类,所以返回结果都为 true
。
instanceof
运算符用于检查对象的类型,而 typeof
运算符用于检查变量的类型。
console.log(typeof 'Hello'); // string
console.log(typeof 42); // number
console.log(typeof true); // boolean
console.log(typeof {a: 1}); // object
console.log('Hello' instanceof String); // false
console.log(42 instanceof Number); // false
console.log(true instanceof Boolean); // false
console.log({a: 1} instanceof Object); // true
从上面的示例中可以看出,typeof
运算符返回变量的类型字符串,而 instanceof
运算符返回一个布尔值。
isPrototypeOf()
方法是 JavaScript 内置的用于检查一个对象是否存在于另一个对象的原型链上的方法。
function Person() {}
const person = new Person();
console.log(Person.prototype.isPrototypeOf(person)); // true
从上面的示例中可以看出,isPrototypeOf()
方法也可以用于判断对象是否是构造函数的实例。不过,instanceof
运算符相对来说更常用,因为它可以同时检查对象是否是父类或子类的实例。
instanceof
运算符是 JavaScript 中的一个重要运算符,在判断对象的类型时非常有用。它能够判断对象是否是特定类型的实例或是其原型链上的实例。在开发中,我们经常使用 instanceof
运算符来处理对象的类型检查和多态性。