JavaScript/Object/prototype/valueOf
Object.prototype.valueOf()
は、オブジェクトのプリミティブ値を返すメソッドです。このメソッドは、オブジェクトがプリミティブ値として使用される際に自動的に呼び出され、オブジェクトの値を返します[1]。
構文
編集obj.valueOf()
obj
: プリミティブ値を取得する対象のオブジェクト。
例
編集オブジェクトのプリミティブ値を取得するプログラム
編集以下のプログラムは、Object.prototype.valueOf()
を使用してオブジェクトのプリミティブ値を取得します。
const obj = { a: 1, b: 2 }; console.log(obj.valueOf()); // { a: 1, b: 2 }
このプログラムでは、obj
オブジェクトのプリミティブ値を取得しています。デフォルトでは、オブジェクト自身が返されます。
組み込みオブジェクトのプリミティブ値を取得するプログラム
編集以下のプログラムは、Object.prototype.valueOf()
を使用して組み込みオブジェクトのプリミティブ値を取得します。
const num = new Number(42); const str = new String('Hello'); const date = new Date(); console.log(num.valueOf()); // 42 console.log(str.valueOf()); // "Hello" console.log(date.valueOf()); // 1696498200000 (例: タイムスタンプ)
このプログラムでは、数値、文字列、日付オブジェクトのプリミティブ値を取得しています。それぞれのオブジェクトの valueOf()
メソッドは、適切なプリミティブ値を返します。
カスタムオブジェクトの valueOf() メソッドをオーバーライドするプログラム
編集以下のプログラムは、Object.prototype.valueOf()
をオーバーライドしてカスタムオブジェクトのプリミティブ値を定義します。
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.valueOf = function() { return this.age; }; const person = new Person('Alice', 30); console.log(person.valueOf()); // 30 console.log(person + 5); // 35
このプログラムでは、Person
コンストラクタ関数の valueOf()
メソッドをオーバーライドして、年齢をプリミティブ値として返すように定義しています。これにより、person
オブジェクトを数値として使用することができます。
注意点
編集- デフォルトの動作:
Object.prototype.valueOf()
のデフォルトの動作は、オブジェクト自身を返すことです。ただし、多くの組み込みオブジェクトはこのメソッドをオーバーライドして、適切なプリミティブ値を返します。 - 自動的な呼び出し:
valueOf()
メソッドは、オブジェクトがプリミティブ値として使用される際に自動的に呼び出されます。例えば、数値演算や文字列連結の際に呼び出されます。 - オブジェクト以外の引数:
valueOf()
は、オブジェクト以外の値に対して呼び出されると、その値をオブジェクトに変換しようとします。例えば、数値や文字列を渡すと、それらのラッパーオブジェクトのvalueOf()
メソッドが呼び出されます。 - プリミティブ値: プリミティブ値(数値、文字列、真偽値など)に対して
valueOf()
を呼び出すと、対応するラッパーオブジェクトのvalueOf()
メソッドが呼び出され、プリミティブ値が返されます。
脚註
編集- ^ これは、オブジェクトのプリミティブ値を取得するために使用されます。
外部リンク
編集