1. ホーム
  2. javascript

[解決済み] JavaScriptのinstanceof演算子とは何ですか?

2022-03-17 21:13:41

質問

その instanceof というキーワードは、JavaScriptがオブジェクト指向のプログラミング言語ではないと思われがちなので、最初に遭遇したときはかなり混乱するかもしれません。

  • 何ですか?
  • どのような問題を解決するのですか?
  • どのような場合に適切で、どのような場合に適切でないか?

どのように解決するのですか?

インスタンスオブ

左辺(LHS)オペランドは、クラスの実際のコンストラクタである右辺(RHS)オペランドに対して、テストされる実際のオブジェクトです。基本的な定義は以下の通りです。

現在のオブジェクトをチェックし、指定されたオブジェクト型のオブジェクトであれば真を返します。

以下は 良い例 から直接引用した例です。 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 であるかどうか。確かに、それは真を返します。次に、まだ Customer オブジェクトであるかどうかをチェックします。 String . いや、間違いなく String を新たに作成しました。 Customer オブジェクトではなく String オブジェクトを生成します。この場合、falseを返します。

本当に簡単ですね。