概要
指定されたオブジェクトのプリミティブな値を返します。
構文
object.valueOf()
引数
無し
説明
JavaScript は valueOf メソッドを、オブジェクトをプリミティブな値に変換するときに呼び出します。あなたが自分で valueOf メソッドを実行する必要はほとんどなく、プリミティブな値が期待される場面にオブジェクトが出くわしたとき JavaScript が自動的に実行します。
デフォルトで、valueOf メソッドは Object の子孫にあたるあらゆるオブジェクトに継承されています。全ての組み込みコアオブジェクトは適切な値を返すためにこのメソッドを上書きしています。もしオブジェクトがプリミティブな値を持たない場合、valueOf はオブジェクト自身を返します。それは以下のように表示されます。
[object Object]
あなたは自分のコードで組み込みオブジェクトをプリミティブな値にするために valueOf を使うことができます。またカスタムオブジェクトを生成した時は、あなたは Object.valueOf を上書きしてデフォルトの Object のメソッドの代わりにカスタムメソッドを呼び出すようにすることができます。
カスタムオブジェクトの valueOf の上書き
あなたはデフォルトの valueOf メソッドに代わって呼び出される関数を作ることができます。関数は引数を取ってはなりません。
myNumberType というオブジェクト型があって、それに valueOf メソッドを作りたいとしましょう。以下のコードはユーザー定義関数をオブジェクトの valueOf メソッドに代入しています。
myNumberType.prototype.valueOf = function () { return customPrimitiveValue; };
上のコードにより、myNumberType 型のオブジェクトがプリミティブな値で表されるべき文脈で使われた時にはいつでも、JavaScript は自動的に上のコードで定義された関数を呼び出します。
オブジェクトの valueOf メソッドはたいてい JavaScript によって実行されますが、あなた自身も以下のように実行できます。
myNumber.valueOf()
注意
文字列型の文脈にあるオブジェクトは toString メソッドを通じて変換されますが、これは String オブジェクトが valueOf を使って文字列型に変換されるのとは違います。すべての文字列オブジェクトは、たとえ "[object
type
]" であるとしても、文字列への変換ができます。しかし多くのオブジェクトは数値や真偽値や関数には変換されません。