Object.prototype.toString() メソッド:オブジェクトのクラス名を取得
JavaScript オブジェクトのクラスを取得する方法
constructor.name プロパティを使う
最も簡単な方法は、constructor.name
プロパティを使うことです。これは、オブジェクトのコンストラクタの名前を返します。
const obj = new String('Hello');
console.log(obj.constructor.name); // 'String'
instanceof
演算子を使って、オブジェクトが特定のクラスのインスタンスかどうかを確認できます。
const obj = new String('Hello');
console.log(obj instanceof String); // true
Object.prototype.toString.call()
メソッドを使って、オブジェクトのクラス名を含む文字列を取得できます。
const obj = new String('Hello');
console.log(Object.prototype.toString.call(obj)); // '[object String]'
自作の関数を使う
上記の方法以外にも、自作の関数を使ってオブジェクトのクラスを取得することができます。
function getClass(obj) {
if (obj === null) {
return 'null';
}
if (typeof obj === 'undefined') {
return 'undefined';
}
return Object.prototype.toString.call(obj).slice(8, -1);
}
const obj = new String('Hello');
console.log(getClass(obj)); // 'String'
JavaScript オブジェクトのクラスを取得するには、いくつかの方法があります。どの方法を使うかは、状況によって異なります。
補足
constructor.name
プロパティは、JavaScript 1.6 で導入されました。Object.prototype.toString.call()
メソッドは、JavaScript 1.0 で導入されました。
// 1. constructor.name プロパティを使う
const obj1 = new String('Hello');
console.log(obj1.constructor.name); // 'String'
// 2. instanceof 演算子を使う
const obj2 = new String('Hello');
console.log(obj2 instanceof String); // true
// 3. Object.prototype.toString.call() メソッドを使う
const obj3 = new String('Hello');
console.log(Object.prototype.toString.call(obj3)); // '[object String]'
// 4. 自作の関数を使う
function getClass(obj) {
if (obj === null) {
return 'null';
}
if (typeof obj === 'undefined') {
return 'undefined';
}
return Object.prototype.toString.call(obj).slice(8, -1);
}
const obj4 = new String('Hello');
console.log(getClass(obj4)); // 'String'
実行方法
上記のコードをブラウザの開発者ツールなどのコンソールで実行すると、以下の結果が表示されます。
'String'
true
'[object String]'
'String'
補足
- 上記のコードは、JavaScript 1.6 以降で動作します。
constructor.name
プロパティは、IE 8 以前ではサポートされていません。
JavaScript オブジェクトのクラスを取得する他の方法
Object.getPrototypeOf()
メソッドを使って、オブジェクトのプロトタイプを取得できます。プロトタイプの constructor
プロパティには、オブジェクトのクラスが格納されています。
const obj = new String('Hello');
const proto = Object.getPrototypeOf(obj);
console.log(proto.constructor.name); // 'String'
クラスの prototype
プロパティには、そのクラスのインスタンスが持つすべてのプロパティとメソッドが格納されています。
class Person {
constructor(name) {
this.name = name;
}
}
const obj = new Person('John Doe');
console.log(obj instanceof Person.prototype); // true
Symbol.toStringTag
シンボルは、オブジェクトのクラス名を表すシンボルです。
const obj = new String('Hello');
console.log(obj[Symbol.toStringTag]); // 'String'
補足
Symbol.toStringTag
シンボルは、ES6 で導入されました。
javascript oop