指定されたオブジェクトのプリミティブな値を返します。

構文

object.valueOf()

戻り値

objectのプリミティブ値を返します。

説明

JavaScript は valueOf メソッドを、オブジェクトをプリミティブな値に変換するときに呼び出します。あなたが自分で valueOf メソッドを実行する必要はほとんどなく、プリミティブな値が期待される場面にオブジェクトが出くわしたとき JavaScript が自動的に実行します。

デフォルトで、valueOf メソッドは Object の子孫にあたるあらゆるオブジェクトに継承されています。全ての組み込みコアオブジェクトは適切な値を返すためにこのメソッドを上書きしています。もしオブジェクトがプリミティブな値を持たない場合、valueOf はオブジェクト自身を返します。

あなたのコードで組み込みオブジェクトをプリミティブな値にするために valueOf を呼ぶことができます。また、カスタムオブジェクトを作成した時にObject.prototype.valueOf() を上書きしてデフォルトの Object のメソッドの代わりにカスタムメソッドを呼び出すようにすることができます。

カスタムオブジェクトでの valueOf の上書き

デフォルトの valueOf メソッドに代わって呼び出される関数を作ることができます。その関数は引数を取ってはなりません。

myNumberType というオブジェクト型があって、それに valueOf メソッドを作りたいとしましょう。以下のコードはユーザー定義関数をオブジェクトの valueOf メソッドに代入しています。

MyNumberType.prototype.valueOf = function() { return customPrimitiveValue; };

上のコードにより、myNumberType 型のオブジェクトがプリミティブな値で表されるべき文脈では常に、JavaScript は自動的に上のコードで定義された関数を呼び出します。

オブジェクトの valueOf メソッドはたいてい JavaScript によって実行されますが、あなた自身も以下のように実行できます。

myNumberType.valueOf()

注意:文字列型の文脈にあるオブジェクトは toString メソッドを通じて変換されますが、これは String オブジェクトが valueOf を使って文字列型に変換されるのとは違います。すべてのオブジェクトは("[object type]"としか出力されないかもしれませんが)文字列変換できます。しかし多くのオブジェクトは数値や真偽値や関数には変換できません。

Examples

Using valueOf

function MyNumberType(n) {
    this.number = n;
}

MyNumberType.prototype.valueOf = function() {
    return this.number;
};

var myObj = new MyNumberType(4);
myObj + 3; // 7

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) 標準 Initial definition. Implemented in JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
Object.prototype.valueOf の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
Object.prototype.valueOf の定義
標準  
ECMAScript Latest Draft (ECMA-262)
Object.prototype.valueOf の定義
ドラフト  

Browser compatibility

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応 あり あり1 あり あり あり
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり あり4 あり あり あり

関連情報

ドキュメントのタグと貢献者

このページの貢献者: woodmix, teoli, ethertank, Potappo, Mgjbot, Yuichirou
最終更新者: woodmix,