2012-03-14 7 views

答えて

32

Date.prototype.getTimeメソッドは、エポック(1970-01-01T00:00:00Z)からのミリ秒数を返します。 Date型と重要なメソッドに固有のものです。

Object.prototype.valueOf methodは、任意のオブジェクトの「プリミティブ値」を取得するために使用されます。 Dateクラスの場合、日付の共通表現であるため、 "time"属性(getTime()によって返された値)をプリミティブ形式として使用すると便利です。さらに、日付演算子を算術演算子を使用して比較演算子(<<=>など)を使用するだけで比較できるようにします。

var d = new Date(); 
d.getTime(); // => 1331759119227 
d.valueOf(); // => 1331759119227 
+d; // => 1331759119227 (implicitly calls "valueOf") 
var d2 = new Date(); 
(d < d2); // => true (d came before d2) 

あなたが面白いことを行うには、独自のタイプのために「のvalueOf」メソッドを実装することができ注:

function Person(name, age) {this.name=name; this.age=age;} 
Person.prototype.valueOf = function() {return this.age; } 

var youngster = new Person('Jimmy', 12); 
var oldtimer = new Person('Hank', 73); 
(youngster < oldtimer); // => true 
youngster + oldtimer; // => 85 
+2

'+ d 'は' 0 + d'と同じではないことに注意してください。後者はDateをStringに変換します。 – user502144

+0

これは完全に良い答えだと確信していますが、それはまだ私のために少しばかだ。あなたは少し詳しく説明できますか?私は「プリミティブ型」を取得し、「時間は...初期型」と混同しています。これは 'getTime()'と 'valueOf()'の違いをどのようにしていますか?また、「スケール表示」とは何ですか?ありがとうございました。 – Karl

+2

@KarlのgetTime()の唯一の目的は、UTC 1970年1月1日0時からのミリ秒数を返すことです。 'valueOf()'は単一の値を返しますが、これは文字列でも数値でもオブジェクトクラスではありません。したがって、プリミティブ型です。比較のために使用されるかもしれないもの、数値表現。私は、言語設計者があなたがすでにその目的のために 'getTime()'を使用して、それを使っていると思ったと思います。それは異なって実装されているかもしれませんが、利便性のために 'getTime()'を使いました。 –

3

valueOfは、すべてのオブジェクトのメソッドです。オブジェクトは、自由にこれをオーバーライドして、必要なものにすることができます。

+7

JavaScript 1.0でgetTimeが導入され、JavaScript 1.1でvalueOfが導入されたと考えると、これは意味があります。私の推測では、getTimeは後方互換性のために保持されていました。 – kahoon

関連する問題