📜  JavaScript Instanceof 运算符(1)

📅  最后修改于: 2023-12-03 15:01:37.809000             🧑  作者: Mango

JavaScript instanceof 运算符

在 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 类的实例。由于 catCat 类的实例,同时也是 Animal 类的子类,所以返回结果都为 true

常见问题
instanceof vs typeof

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 运算符返回一个布尔值。

instanceof vs isPrototypeOf

isPrototypeOf() 方法是 JavaScript 内置的用于检查一个对象是否存在于另一个对象的原型链上的方法。

function Person() {}
const person = new Person();
console.log(Person.prototype.isPrototypeOf(person)); // true

从上面的示例中可以看出,isPrototypeOf() 方法也可以用于判断对象是否是构造函数的实例。不过,instanceof 运算符相对来说更常用,因为它可以同时检查对象是否是父类或子类的实例。

总结

instanceof 运算符是 JavaScript 中的一个重要运算符,在判断对象的类型时非常有用。它能够判断对象是否是特定类型的实例或是其原型链上的实例。在开发中,我们经常使用 instanceof 运算符来处理对象的类型检查和多态性。