メインコンテンツまでスキップ

instanceof演算子

instanceof演算子は、特定のオブジェクトがクラスのインスタンスかをチェックするJavaScriptの演算子です。

構文

js
オブジェクト instanceof クラス
js
オブジェクト instanceof クラス

引数

  • オブジェクト: 検査するオブジェクトです。
  • クラス: 検査対象のクラス名です。

ts
class ClassA {}
class ClassB {}
const a = new ClassA();
console.log(a instanceof ClassA);
true
console.log(a instanceof ClassB);
false
ts
class ClassA {}
class ClassB {}
const a = new ClassA();
console.log(a instanceof ClassA);
true
console.log(a instanceof ClassB);
false

継承とinstanceof

instanceofは継承関係をチェックすることもできます。たとえば、次のようにChildクラスのインスタンスがParentクラスのインスタンスかをチェックすることができます。

ts
class Parent {}
class Child extends Parent {}
const child = new Child();
console.log(child instanceof Parent);
true
ts
class Parent {}
class Child extends Parent {}
const child = new Child();
console.log(child instanceof Parent);
true

instanceofの反転

instanceof演算子の結果を反転させる場合は、値 instanceof クラス名の句全体をカッコで囲った上で、否定演算子!を先頭につける必要があります。

ts
if (!(myInstance instanceof MyClass)) {
// myInstanceがMyClassではないときの処理
}
ts
if (!(myInstance instanceof MyClass)) {
// myInstanceがMyClassではないときの処理
}

抽象クラスとinstanceof

TypeScriptには抽象クラスがあります。instanceof演算子は抽象クラスについても使うことができます。

ts
abstract class AbstractClass {}
class ConcreteClass extends AbstractClass {}
const obj = new ConcreteClass();
console.log(obj instanceof AbstractClass);
true
ts
abstract class AbstractClass {}
class ConcreteClass extends AbstractClass {}
const obj = new ConcreteClass();
console.log(obj instanceof AbstractClass);
true