【超便利】JavaScriptでオブジェクトを判定する5つの方法
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
演算子は、値が特定の型のインスタンスかどうかを返します。オブジェクトの場合、instanceof
は Object
型のインスタンスかどうかを返します。
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
演算子は、obj
とnullValue
の両方が"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