JavaScript/Object/prototype/valueOf
表示
Object.prototype.valueOf()
[編集]- 構文
obj.valueOf()
オブジェクトのプリミティブ値を返します。算術演算子や文字列連結に使用される場合、valueOf()
が優先的に呼び出されます。
Object.prototype.valueOf()
は、JavaScript におけるすべてのオブジェクトが継承するメソッドで、オブジェクトのプリミティブな値を返すために使用されます。
ただし、Object.prototype.valueOf()
は、ほとんどの組み込みオブジェクトでオーバーライドされているか、カスタマイズされて使用されるため、その挙動はオブジェクトの種類によって異なります。
基本的な動作
[編集]デフォルトでは、valueOf()
はオブジェクト自身を返します(プリミティブな値ではなく、参照としてのオブジェクトを返します)。
const obj = { a: 1 }; console.log(obj.valueOf()); // { a: 1 } console.log(obj.valueOf() === obj); // true
この動作は、Object
のデフォルト実装によるものです。
異なるオブジェクトでの動作
[編集]Number
オブジェクトでは、valueOf()
は数値のプリミティブ値を返します。
const num = new Number(42); console.log(num.valueOf()); // 42
String
オブジェクトでは、valueOf()
は文字列のプリミティブ値を返します。
const str = new String("Hello"); console.log(str.valueOf()); // "Hello"
Array
オブジェクトでは、valueOf()
はオブジェクトそのものを返します。
const arr = [1, 2, 3]; console.log(arr.valueOf()); // [1, 2, 3] console.log(arr.valueOf() === arr); // true
カスタムオブジェクト
[編集]独自のオブジェクトで valueOf()
をオーバーライドすることができます。
class Custom { constructor(value) { this.value = value; } valueOf() { return this.value; } } const customObj = new Custom(100); console.log(customObj.valueOf()); // 100
- 演算子での型変換 JavaScript では、
+
や比較演算子を使う際に、オブジェクトがプリミティブ値に変換される場合があります。そのときvalueOf()
が呼び出されます。const num = new Number(10); console.log(num + 5); // 15 (num.valueOf() が呼ばれる)
- カスタム動作 カスタムオブジェクトで特定の動作を持たせるためにオーバーライドすることがあります(例:ゲームオブジェクトのスコア計算など)。
注意点
[編集]Object.prototype.valueOf()
は通常のオブジェクトでは滅多に直接使用されません。- プリミティブ値を返すのか、オブジェクトそのものを返すのかはオブジェクトの種類に依存します。
- 独自のクラスやオブジェクトでオーバーライドする場合、慎重に設計する必要があります。
まとめ
[編集]Object.prototype.valueOf()
は、オブジェクトのプリミティブ値を取得するためのメソッドであり、デフォルトではオブジェクトそのものを返します。ただし、特定のビルトインオブジェクトやカスタムオブジェクトで挙動を変えることができます。