instanceofとは?初心者にやさしい使い方と例解共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
instanceofとは?初心者にやさしい使い方と例解共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢: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 で、あるクラスが別のクラスに代入可能かを判定します(同等の意を持つ補助的チェック)。

instanceofのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14213viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2216viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1037viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
792viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
746viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
684viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
597viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
563viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
539viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
506viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
472viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
466viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
450viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
425viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
418viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
372viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
363viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
337viws
wi-fiとは?初心者向けにわかりやすく解説する基礎ガイド共起語・同意語・対義語も併せて解説!
299viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
294viws

新着記事

インターネット・コンピュータの関連記事