JavaScript

レシピ

データについて

特定のオブジェクトのインスタンスであるか調べる

変数に入っているインスタンスが特定のオブジェクトのインスタンスであるかを調べる方法について解説します。

この記事のポイント

  • instanceof演算子で特定のオブジェクトのインスタンスか確認する
  • プリミティブ値はtypeof演算子を使う

目次

オブジェクトのインスタンスになっているか確認する

オブジェクトのインスタンスに対してinstanceof演算子を使うと、特定のオブジェクトのインスタンスかを判定して調べることができます。

以下の例はPersonオブジェクトを定義して変数johnにインスタンスを作成し、Personオブジェクトのインスタンスであるか結果を出力します。
instanceof演算子は「インスタンス instanceof オブジェクト名」の形で使用し、「オブジェクト名」のインスタンスであればtrue、そうでないときはfalseを返します。

コード例

var Person = function( id, name){
  this.id = id;
  this.name = name;
};
Person.prototype.id = 0;
Person.prototype.name = null;
Person.prototype.getId = function(){
  return this.id;
};

// Personオブジェクトのインスタンスを作成
var john = new Person( 150001, 'John');
console.log(john instanceof Person); // true

最終行で変数johnに入っているインスタンスがPersonオブジェクトのインスタンスであるかを判定して、console.logメソッドで出力します。

標準のオブジェクトのインスタンスか確認する

JavaScriptが標準で用意している配列のArrayオブジェクトや日時のDateオブジェクトのインスタンスに対しても、instanceof演算子を使って確認することができます。

コード例

// Arrayオブジェクト
var array_object = ["lion","cat","dog"];
console.log(array_object); // (3) ["lion", "cat", "dog"]
console.log(array_object instanceof Array); // true

// Dateオブジェクト
var date_object = new Date();
console.log(date_object.getTime()); // 1594900411780
console.log(date_object instanceof Date); // true
console.log(date_object instanceof Error); // false

文字列(String)や数値(Number)のようなプリミティブ値に対しては、instanceof演算子を使用しても親オブジェクトの判定はできないため注意が必要です。

以下の例では、文字列(String)と数値(Number)に対してプリミティブ値とnew演算子を使う2パターンを用意して、typeof演算子で型を出力してからinstanceof演算子を使います。

コード例

// 文字列のプリミティブ値
var string_object = "cat";
console.log(typeof string_object); // string
console.log(string_object instanceof String); // false

// new演算子でStringオブジェクトのインスタンス作成
var string_object = new String("cat");
console.log(typeof string_object); // object
console.log(string_object instanceof String); // true

// 数値のプリミティブ値
var number_object = 100;
console.log(typeof number_object); // number
console.log(number_object instanceof Number); // false

// new演算子でNumberオブジェクトのインスタンス作成
var number_object = new Number(100);
console.log(typeof number_object); // object
console.log(number_object instanceof Number); // true

プリミティブ値はあまりnew演算子を使ってインスタンスを作成することはないため、instanceof演算子ではなくtypeof演算子を使って値の型を調べる方法が便利です。

以上のことから、プリミティブ値とnew演算子を使った方法では次のように使い分けることができます。
パターン1はプリミティブ値に対してtypeof演算子で型を確認するケース、パターン2はnew演算子で作成したインスタンスに対してinstanceof演算子を使って親オブジェクトを確認するケースです。

コード例

// パターン1.プリミティブ値
var string_object = "cat";
if(typeof string_object === 'string') {
  // 実行する処理
}


// パターン2.new演算子でインスタンス作成
var string_object = new String("cat");
if(string_object instanceof String) {
  // 実行する処理
}

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。