JavaScript のキーワードinstanceof
は、初めて遭遇したときには非常に混乱を招く可能性があります。JavaScript はオブジェクト指向プログラミング言語ではないと考える傾向があるためです。
- それは何ですか?
- どのような問題を解決しますか?
- いつが適切で、いつが不適切でしょうか?
ベストアンサー1
インスタンス
左側 (LHS) オペランドは、クラスの実際のコンストラクターである右側 (RHS) オペランドに対してテストされる実際のオブジェクトです。基本的な定義は次のとおりです。
現在のオブジェクトをチェックし、オブジェクトが指定されたオブジェクト タイプである場合は true を返します。
ここにあるいくつかの良い例以下は直接引用した例ですMozilla の開発者サイト:
var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral"; //no type specified
color2 instanceof String; // returns false (color2 is not a String object)
instanceof
言及する価値があるのは、オブジェクトがクラスのプロトタイプから継承されている場合に true と評価されることです。
var p = new Person("Jon");
p instanceof Person
は を継承するので、はp instanceof Person
真です。p
Person.prototype
OPのリクエストにより
サンプル コードと説明を添えた小さな例を追加しました。変数を宣言するときは、特定の型を指定します。
例えば:
int i;
float f;
Customer c;
i
上記では、、、f
およびという変数を示していますc
。型はinteger
、、float
およびユーザー定義のCustomer
データ型です。上記のような型は、JavaScript だけでなく、どの言語でも使用できます。ただし、JavaScript では、変数を宣言するときに型を明示的に定義しないため、var x
x は数値、文字列、またはユーザー定義のデータ型になります。つまり、instanceof
オブジェクトが指定された型であるかどうかをチェックするので、上記のオブジェクトを取得して、Customer
次の操作を実行できます。
var c = new Customer();
c instanceof Customer; //Returns true as c is just a customer
c instanceof String; //Returns false as c is not a string, it's a customer silly!
上記で、 がc
型で宣言されていることを確認Customer
しました。これを new して、 型かCustomer
どうかを確認しました。確かに 型であれば、true が返されます。次に、引き続きCustomer
オブジェクトを使用して、 かどうかを確認しますString
。いいえ、絶対に ではありません。オブジェクトではなく、オブジェクトString
を new しました。この場合は、false が返されます。Customer
String
本当にそれだけ簡単です!