【超便利】JavaScriptでオブジェクトを判定する5つの方法

2024-04-02

JavaScriptで値がオブジェクトかどうかを確認する方法

typeof 演算子は、値の型を返します。オブジェクトの場合、typeof"object" を返します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(typeof obj); // "object"

ただし、null の場合も typeof"object" を返すため、注意が必要です。

const nullValue = null;

console.log(typeof nullValue); // "object"

instanceof 演算子は、値が特定の型のインスタンスかどうかを返します。オブジェクトの場合、instanceofObject 型のインスタンスかどうかを返します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(obj instanceof Object); // true
const nullValue = null;

console.log(nullValue instanceof Object); // true

Object.prototype.isPrototypeOf メソッドは、指定された値がオブジェクトのプロトタイプチェーン上にあるかどうかを返します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(Object.prototype.isPrototypeOf(obj)); // true

ただし、この方法は、オブジェクトのプロトタイプチェーンが変更されている場合、正しく動作しない可能性があります。

Object.keys メソッドは、オブジェクトのプロパティ名の配列を返します。オブジェクトの場合、Object.keys は空でない配列を返します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(Object.keys(obj).length > 0); // true

ただし、空のオブジェクトの場合も、Object.keys は空の配列を返すため、注意が必要です。

const emptyObj = {};

console.log(Object.keys(emptyObj).length > 0); // false

値がオブジェクトかどうかを確認するには、いくつかの方法があります。それぞれの方法には、それぞれメリットとデメリットがあります。

  • typeof 演算子は、シンプルで高速ですが、null の場合も "object" を返すため、注意が必要です。
  • instanceof 演算子は、より正確ですが、null の場合も Object 型のインスタンスかどうかを返すため、注意が必要です。
  • Object.prototype.isPrototypeOf メソッドは、オブジェクトのプロトタイプチェーン上にあるかどうかを確認できますが、オブジェクトのプロトタイプチェーンが変更されている場合、正しく動作しない可能性があります。
  • Object.keys メソッドは、オブジェクトのプロパティ名の配列を返すため、オブジェクトかどうかだけでなく、オブジェクトの内容を確認することもできます。



const obj = {
  name: "John Doe",
  age: 30,
};

const nullValue = null;

// typeof 演算子
console.log(typeof obj); // "object"
console.log(typeof nullValue); // "object"

// instanceof 演算子
console.log(obj instanceof Object); // true
console.log(nullValue instanceof Object); // true

// Object.prototype.isPrototypeOf メソッド
console.log(Object.prototype.isPrototypeOf(obj)); // true
console.log(Object.prototype.isPrototypeOf(nullValue)); // true

// Object.keys メソッド
console.log(Object.keys(obj).length > 0); // true
console.log(Object.keys(nullValue).length > 0); // false

出力結果

"object"
"object"
true
true
true
true
true
false

説明

  • typeof 演算子は、objnullValue の両方が "object" であることを返します。
  • Object.keys メソッドは、obj は空でない配列を返し、nullValue は空の配列を返します。



値がオブジェクトかどうかを確認する他の方法

constructor プロパティを使う

すべてのオブジェクトは、constructor プロパティを持っています。このプロパティは、オブジェクトを作成したコンストラクタ関数を指します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(obj.constructor === Object); // true

Object.getPrototypeOf メソッドは、オブジェクトのプロトタイプオブジェクトを返します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(Object.getPrototypeOf(obj) === Object.prototype); // true

hasOwnProperty メソッドは、オブジェクトが指定されたプロパティを持っているかどうかを返します。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(obj.hasOwnProperty("name")); // true
console.log(obj.hasOwnProperty("age")); // true

ラッパーオブジェクトを使う

JavaScriptには、いくつかのラッパーオブジェクトがあります。これらのオブジェクトは、プリミティブ値をオブジェクトに変換します。

const num = 10;
const obj = new Number(num);

console.log(obj instanceof Object); // true

ただし、この方法は、ラッパーオブジェクトを作成する必要があり、パフォーマンスに影響を与える可能性があります。


javascript types javascript-objects


JavaScript:可変長引数でコードをより簡潔に!引数の個数に左右されないプログラミング

可変長引数は、関数定義の最後の引数に . .. をプレフィックスとして記述することで宣言します。この . .. は、残余引数と呼ばれ、渡されたすべての残りの引数を配列として格納します。柔軟性: 引数の個数が不定なので、状況に応じて必要な引数のみを渡すことができます。...


ワンランク上の Web デザイン:HTML5 Canvas で画像をリサイズして差をつける

HTML で Canvas 要素を作成する:JavaScript で画像を読み込む:Canvas に画像を描画する:(オプション) 画像のアスペクト比を維持する:この例では、400x300 ピクセルの Canvas 要素を作成し、"image...


Reactイベントオブジェクトのカスタム属性:詳細解説とサンプルコード

これは、HTML要素にdata-属性を使用してカスタム属性を設定し、イベントオブジェクトのtargetプロパティからアクセスする方法です。例:これは、イベントが発生した要素ではなく、イベントリスナーが登録された要素からカスタム属性にアクセスする方法です。...


配列の達人になる!JavaScriptでキー値に基づいてオブジェクトを検索・削除

この処理は、様々な場面で役立ちます。例えば、以下のようなケースが考えられます。特定の条件を満たす商品データをショッピングカートから削除するユーザー情報に基づいて古いデータをデータベースから削除する特定のカテゴリに属する記事をブログ記事のリストから削除する...


【初心者向け】Reactで発生する「REACT ERROR cannot appear as a child of . See (unknown) > thead > th」エラー: 原因と解決策

原因HTMLの仕様では、<thead>要素内に直接<th>要素を配置することはできません。<th>要素は<tr>要素の子要素として配置する必要があります。**解決策以下の方法で解決できます。<tr>要素内に<th>要素を配置する<tbody>要素を追加する...