instanceof 判定 — obj instanceof Class
JavaScript の instanceof 演算子は「あるオブジェクトが特定のクラス(コンストラクタ関数)から生成されたかどうか」を判定するために使います。
初心者は「このオブジェクトはこの型から作られたもの?」を調べる道具と覚えると理解しやすいです。
基本のコード例
class User {}
const u = new User();
console.log(u instanceof User); // → true
console.log(u instanceof Array); // → false
JavaScriptobj instanceof Class→objがClassのインスタンスなら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()を使う。
- 例: 別の iframe やウィンドウで作られた配列は
- プリミティブは判定できない:
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= 「このオブジェクトはこのクラスから作られた?」を調べる。- 親クラスも判定できる。
- 配列や日付などの組み込み型にも使える。
- プリミティブ型には使えない。
これを覚えれば「型チェック」「継承関係の判定」「配列や日付の判定」など、オブジェクトの種類を安全に扱えるようになります。
