valueOf() メソッドは、指定されたオブジェクトのプリミティブな値を返します。

構文

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]" としか出力されないかもしれませんが、文字列変換できます。しかし多くのオブジェクトは数値や真偽値や関数には変換できません。

valueOf の使用

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

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

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

仕様書

仕様書 状態 備考
ECMAScript 1st Edition (ECMA-262) 標準 初回定義。 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 の定義
ドラフト  

ブラウザーの対応

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

凡例

完全対応  
完全対応

関連情報

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

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