

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
はじめに
プログラマーの世界には、instanceofというキーワードがよく登場します。これはある値が特定の型のインスタンスかどうかを判定するための演算子です。初心者の方には最初は少し混乱するかもしれませんが、使い方を知ると非常に役立つ道具です。
基本の意味
instanceof は左辺の値が右辺の型のインスタンスかどうかを判定します。つまりこの値はこの型の作られ物かという質問に対して真偽を返します。例として次のような使い方があります。
例: let arr = []; arr instanceof Array は true になります。
使い方のコツ
データが複数の型の可能性を持つ場面で活躍します。引数が配列かどうかを分岐するなど、処理を正しく分ける手助けになります。
注意点
注意点として、instanceof はプロトタイプチェーンを辿って判定する点が重要です。期待した型と一致しないことがあるので、環境や実装によって結果が異なる場合があります。実務では型判定の要件に応じて別の方法と組み合わせて使うと安心です。
プリミティブ値は通常はオブジェクトではないため、instanceof の判定結果が期待と異なることがあります。数値なら Number のインスタンスとはみなされません。必要に応じて新しくオブジェクトを作るか、他の判定方法を使いましょう。
null や undefined に対しては instanceof は常に false になります。これも覚えておくとよいです。
実例
例1: let a = [1, 2, 3]; a instanceof Array は true になります。
例2: let obj = { key: 'value' }; obj instanceof Object は true になります。
例3: function Foo() {}; let f = new Foo(); f instanceof Foo は true になります。
なお Array.isArray を使うと配列判定が直感的で安全な場合があり、instanceof と併用するとよい場面も多いです。
ポイント表
| ポイント | 説明 |
|---|---|
| 意味 | 左辺の値が右辺の型のインスタンスかどうかを判定 |
| 返り値 | true か false |
| 注意点 | プロトタイプチェーンに依存する |
| 代替案 | Array.isArray などの他の方法 |
まとめ
instanceof はオブジェクトがどの型のインスタンスかを判定する目的で使われる強力な道具です。正しく使えばコードの分岐をわかりやすくしバグを減らす手助けになります。
instanceofの同意語
- インスタンス判定
- オブジェクトが特定のクラスのインスタンスかどうかを判定する処理。
- 型チェック
- オブジェクトの型が特定の型と一致するかを判定する一般的な表現。
- isInstanceOf
- 英語表現。『~は特定のクラスのインスタンスか』を判定する意味合い。
- is-a判定
- 継承関係に基づき、オブジェクトがあるクラスの派生クラスかを判定する表現。
- 型照合
- オブジェクトの型が指定した型と同一かどうかを照合すること。
- クラス所属検査
- オブジェクトが特定のクラスに属しているかを確認する検査。
- オブジェクトのクラス確認
- オブジェクトの実際のクラスを照合して条件に合致するかを判断する表現。
- 型ガード
- 型が特定の型であると判定する機能。TypeScript などで使われ、instanceof の機能の一部として理解されることが多い。
- 継承関係の検査
- オブジェクトのクラスと指定クラスが継承関係にあるかを検査すること。
- プロトタイプチェーン照合
- JavaScriptの instanceof が参照する“プロトタイプチェーン”に基づく照合を指す表現。
- 動的キャスト検査
- C++ などで実行時に安全に型キャストできるかを検査する動作。
instanceofの対義語・反対語
- instanceofの否定(not instanceof)
- 指定されたクラスのインスタンスではないことを判定する表現。true になると対象はそのクラスのインスタンスではない、という意味です。
- 非インスタンス判定
- オブジェクトが特定のクラスのインスタンスかどうかを判定するのではなく、インスタンスでないことを判断する考え方。
- インスタンスではないことを示すチェック
- このチェックが true を返すとき、対象は指定クラスのインスタンスではないことを意味します。
- not instanceof の日本語表現
- 「〜は〇〇のインスタンスではない」という意味の言い方。対義語的なニュアンスを自然に表現できます。
- typeofはインスタンス判定の対比としての型判定
- typeof はプリミティブ型やオブジェクトの型を判定する別の手段です。インスタンス判定の正反対というより、異なるタイプの判定として使われます。
- isNotInstanceOf(英語風名称)
- あるクラスのインスタンスではないことを表す英語風の名称。実装上は not instanceof に近い概念を指すと解釈されます。
instanceofの共起語
- インスタンス判定
- オブジェクトが指定したクラスのインスタンスかどうかを判定する演算子(右辺はコンストラクタ関数)。
- 左辺
- 判定対象となるオブジェクト(または値)を指す部分。instanceof の左側に置く要素。
- 右辺
- 判定基準となるコンストラクタ関数またはクラス。右辺が関数でないと TypeError が発生することがある。
- 演算子
- instanceof は JavaScript の演算子の一種で、左辺がオブジェクト、右辺がコンストラクタ関数を対象にする。
- コンストラクタ
- オブジェクトを生成する関数で、右辺として使われることが多い。
- クラス
- ES6 以降のクラス宣言・クラス構文と関係する判定にも使われる。
- プロトタイプチェーン
- 左辺オブジェクトのプロトタイプ階層の中で、右辺の prototype が現れるかを判定する考え方。
- prototype
- 右辺のコンストラクタ関数が持つプロトタイプオブジェクト。インスタンス判定の判定元となる。
- JavaScript
- この言語の仕様における、インスタンス判定を行う代表的な方法のひとつ。
- 動的型
- 動的型付け言語の特徴として、実行時に型が決まる点と関係する判定である。
- 型判定
- オブジェクトが特定の型・クラスのインスタンスかどうかを判定する行為。
- 型チェック
- 実行時にオブジェクトの型を検査する手段の一つ。
- 左辺が null/undefined
- 左辺が null や undefined の場合、通常 false が返る。右辺が関数でない場合は TypeError にはならないことが多い。
- TypeError
- 右辺が関数でない場合に発生する実行時エラー。インスタンス判定の際の型エラーの一例。
- isPrototypeOf
- プロトタイプ継承の関係を別の方法で判定する補助的な手段。instanceof の代替として使われることもある。
- ES6 クラス
- class 宣言と組み合わせて使われ、インスタンス判定の文脈で登場する。
- 例文
- 実際の使い方の例として obj instanceof MyClass の形で書くのが一般的。
- 継承
- クラス間の継承関係がある場合、インスタンス判定の結果に影響する。
- 実行時チェック
- 実行時に型関係を確認する性質を指す表現。
- プリミティブ型との違い
- typeof はプリミティブ型の判定で、instanceof はオブジェクトのプロトタイプ階層に基づく判定である点が異なる。
- null安全性
- 左辺が null/undefined の場合の挙動に関する注意点。
instanceofの関連用語
- instanceof演算子
- 左辺のオブジェクトが右辺の関数の prototype 以上のプロトタイプチェーンに含まれているかを判定し、true か false を返します。右辺は関数でなければ TypeError を発生させます。
- プロトタイプチェーン
- オブジェクトが持つ連続的なプロトタイプの連なりで、インスタンス判定やプロパティ探索の基盤となります。
- [[Prototype]] / プロトタイプ継承
- オブジェクトの内部プロパティ [[Prototype]] がつながっており、継承はここを介して実現されます。実装は __proto__ などで参照できます。
- prototypeオブジェクト
- コンストラクター関数に紐づくオブジェクトで、new で作成されるインスタンスの共通の祖先となる。
- constructor
- prototype に自分を指す参照が設定され、どの関数でオブジェクトが作られたかを示します。
- Symbol.hasInstance
- クラスが instanceof の動作をカスタマイズできる特殊なシンボル。これを持つと独自の判定が可能になります。
- isPrototypeOf
- あるオブジェクトのプロトタイプが、別のオブジェクトのプロトタイプチェーンに現れるかを判定します。
- Object.getPrototypeOf
- 任意のオブジェクトのプロトタイプを取得する標準的な方法です。
- クロスレームの挙動
- 異なる実行環境(例: iframe の別グローバル)のオブジェクト間では prototype が異なるため、 instanceof の結果が予期せず変わることがあります。
- typeof
- 値の型を表す演算子。プリミティブ型の型判定に使われますが、nullは “object” になるなど注意点があります。
- null/undefined に対する挙動
- 左辺が null または undefined の場合、instanceof は常に false を返します。
- Javaにおけるinstanceof
- Java の演算子で、左辺のオブジェクトが右辺のクラスまたはインターフェースのインスタンスかを判定します。左辺が null の場合は false。
- Javaの継承とインターフェース
- Java ではクラスの継承関係やインターフェースの実装関係によって instanceof の結果が決まります。
- PHPにおけるinstanceof
- PHP の演算子で、左辺が右辺のクラスまたはインターフェースのインスタンスかを判定します。左辺がオブジェクトでなければ false。
- PHP の is_a / is_subclass_of
- is_a は継承関係を、is_subclass_of はサブクラス関係を判定する関数です。
- Class.isAssignableFrom
- Java で、あるクラスが別のクラスに代入可能かを判定します(同等の意味を持つ補助的チェック)。



















