valueOf() メソッドは、指定されたオブジェクトのプリミティブな値を返します。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
構文
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
仕様書
ブラウザーの対応
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
valueOf | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 あり | Safari 完全対応 あり | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 あり | Safari iOS 完全対応 あり | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
凡例
- 完全対応
- 完全対応