簡述 JavaScript 中 instanceof 運算符

instanceof 運算符用于檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上,即用于檢查一個對象是否屬于某個特定的構造函數或其子類。其基本語法如下:
object instanceof constructor
其中,object 為要檢查的對象,constructor 是構造函數。如果 object 是 constructor 的實例,返回 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 運算符檢查它是否是 Dog、Animal、Object、Array 類型的實例,結果如注釋所示。
上述代碼的流程圖如下所示:

instanceof與typeof有什么區別?
instanceof 運算符和 typeof 運算符都是 JavaScript 中用于檢測數據類型的方法,但是它們的作用和使用方式是不同的。
instanceof 運算符用于檢查一個對象是否屬于某個類或其子類的實例。語法為 obj instanceof Class,其中 obj 是待檢查的對象,Class 是一個類的構造函數。如果 obj 是 Class 的一個實例或者是 Class 的子類的實例,那么 instanceof 運算符就會返回 true,否則返回 false。這種方法主要用于檢查對象的繼承關系,例如檢查一個對象是否是某個類的實例,或者檢查一個對象是否是 Array、Date 等內置類的實例。
typeof 運算符用于檢查一個值的數據類型。語法為 typeof value,其中 value 是要檢查的值。返回值為一個字符串,表示 value 的數據類型。如果 value 是一個對象或者數組,那么返回值為 object。這種方法主要用于檢查基本數據類型,例如檢查一個變量是否為字符串、數字、布爾值等。
因此,instanceof 運算符和 typeof 運算符的作用和使用場景是不同的,需要根據具體情況選擇合適的方法。