Object.prototype.toString()

toString() メソッドは、オブジェクトを表す文字列を返します。

構文

obj.toString()

返値

オブジェクトを表す文字列です。

解説

すべてのオブジェクトは toString メソッドを持ち、オブジェクトが文字列値として表される場面や、文字列が期待される構文で参照されたときに自動的に呼び出されます。既定で、 toString() メソッドは Object の子孫にあたるあらゆるオブジェクトに継承されています。このメソッドがカスタムオブジェクト中で上書きされていない場合、 toString() は "[object type]" という文字列を返します (type は そのオブジェクトの型)。以下のコードがこれを例示しています。

var o = new Object();
o.toString(); // [object Object] を返す

メモ: JavaScript 1.8.5 から、 toString()null に対して呼び出した場合には [object Null] を、 undefined に対して呼び出した場合には [object Undefined] を返すようになり、これは ECMAScript 5th Edition とその後のエラッタによって定義されました。 toString() を使用したオブジェクトクラスの検出を参照してください。

既定の toString メソッドの上書き

既定の toString() メソッドに代わって呼び出される関数を作ることができます。 toString() メソッドは引数を取らず、文字列を返す必要があります。 toString メソッドを作成した場合は好きな文字列を返すことができますが、オブジェクトに関する情報を伝えるのが一番役に立つでしょう。

以下のコードは Dog オブジェクト型を定義し、 Dog 型のオブジェクト theDog を生成しています。

function Dog(name, breed, color, sex) {
  this.name = name;
  this.breed = breed;
  this.color = color;
  this.sex = sex;
}

theDog = new Dog('Gabby', 'Lab', 'chocolate', 'female');

このカスタムオブジェクト上で toString() メソッドを呼び出した場合、メソッドは Object から継承された既定値を返します。

theDog.toString(); // [object Object] を返す

以下のコードでは、 dogToString を生成および割り当てし、既定の toString メソッドを上書きします。この関数はオブジェクトの名前、品種、毛色、性別を "property = value;" の書式で含む文字列を生成します。

Dog.prototype.toString = function dogToString() {
  var ret = 'Dog ' + this.name + ' is a ' + this.sex + ' ' + this.color + ' ' + this.breed;
  return ret;
}

または

Dog.prototype.toString = function dogToString() {
  return `Dog ${this.name} is a ${this.sex} ${this.color} ${this.breed}`;
}

前者のコードの中で、 theDog が文字列の文脈で使用されるたびに、 JavaScript は自動的に dogToString() 関数を呼び出し、以下の文字列を返します。

"Dog Gabby is a female chocolate Lab"

toString() を使用したオブジェクトクラスの判別

toString() はすべてのオブジェクトに対し、そのクラスを得るために使用することができます。すべてのオブジェクトで Object.prototype.toString() を使うためには、 Function.prototype.call() または Function.prototype.apply() を、 第1引数 thisArg に調べたいオブジェクトを渡して呼び出す必要があります。

var toString = Object.prototype.toString;

toString.call(new Date);    // [object Date]
toString.call(new String);  // [object String]
toString.call(Math);        // [object Math]

// Since JavaScript 1.8.5
toString.call(undefined);   // [object Undefined]
toString.call(null);        // [object Null]

仕様書

仕様書 状態 備考
ECMAScript Latest Draft (ECMA-262)
Object.prototype.toString の定義
ドラフト
ECMAScript 2015 (6th Edition, ECMA-262)
Object.prototype.toString の定義
標準
ECMAScript 5.1 (ECMA-262)
Object.prototype.toString の定義
標準 null で呼び出された場合は [object Null] を、 undefined で呼び出された場合は [object Undefined] を返すようになった。
ECMAScript 1st Edition (ECMA-262) 標準 初回定義。 JavaScript 1.0 で実装された。

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
toStringChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応

関連情報