JavaScript 逆引き集 | instanceof 判定

JavaScript JavaScript
スポンサーリンク

instanceof 判定 — obj instanceof Class

JavaScript の instanceof 演算子は「あるオブジェクトが特定のクラス(コンストラクタ関数)から生成されたかどうか」を判定するために使います。
初心者は「このオブジェクトはこの型から作られたもの?」を調べる道具と覚えると理解しやすいです。


基本のコード例

class User {}
const u = new User();

console.log(u instanceof User); // → true
console.log(u instanceof Array); // → false
JavaScript
  • obj instanceof ClassobjClass のインスタンスなら true
  • 違う型なら false

よく使うテンプレート集

クラスの判定

class Animal {}
class Dog extends Animal {}

const d = new Dog();

console.log(d instanceof Dog);    // true
console.log(d instanceof Animal); // true (親クラスも判定OK)
console.log(d instanceof Object); // true (すべてのオブジェクトは Object を継承)
JavaScript

配列判定

const arr = [1, 2, 3];
console.log(arr instanceof Array);  // true
console.log(arr instanceof Object); // true
JavaScript

関数コンストラクタでも使える

function Person(name) {
  this.name = name;
}
const p = new Person("Aki");

console.log(p instanceof Person); // true
JavaScript

例題: 型チェック関数

function checkType(obj) {
  if (obj instanceof Array) {
    console.log("これは配列です");
  } else if (obj instanceof Date) {
    console.log("これは日付です");
  } else {
    console.log("その他のオブジェクトです");
  }
}

checkType([1,2,3]);       // "これは配列です"
checkType(new Date());    // "これは日付です"
checkType({ key: "val" }); // "その他のオブジェクトです"
JavaScript
  • 効果: instanceof を使ってオブジェクトの種類を判定できる。

実務でのコツ

  • 親クラスも判定できる: 継承関係をたどって判定する。
  • 配列判定: Array.isArray(obj) の方が安全(別のフレームや環境をまたぐ場合)。
  • 型チェック: typeof はプリミティブ型判定、instanceof はオブジェクト型判定に使う。
  • モジュールやライブラリ: クラスごとに instanceof で判定できるので便利。

ありがちなハマりポイントと対策

  • 異なる環境で false:
    • 例: 別の iframe やウィンドウで作られた配列は instanceof Array が false。
    • 対策: 配列判定は Array.isArray() を使う。
  • プリミティブは判定できない: console.log(1 instanceof Number); // false → ラッパーオブジェクトなら true (new Number(1))。

練習問題(動物クラス判定)

class Animal {}
class Cat extends Animal {}
class Dog extends Animal {}

const c = new Cat();
const d = new Dog();

console.log(c instanceof Cat);    // true
console.log(c instanceof Animal); // true
console.log(d instanceof Cat);    // false
JavaScript
  • 効果: instanceof で「どのクラスから作られたか」を判定できる。

直感的な指針

  • instanceof = 「このオブジェクトはこのクラスから作られた?」を調べる。
  • 親クラスも判定できる。
  • 配列や日付などの組み込み型にも使える。
  • プリミティブ型には使えない。

これを覚えれば「型チェック」「継承関係の判定」「配列や日付の判定」など、オブジェクトの種類を安全に扱えるようになります。

タイトルとURLをコピーしました