2016-07-31 15 views
2

は、それがこれを行うにはOKですか?それは参照されていないし、ガベージコレクタがそれを削除することができるので、それは理論的にはありませんか?"new"で作成されたDateオブジェクトを変数に格納する必要はありますか?</p> <pre><code>var t = (new Date()).getTime(); </code></pre> <p>またはそのようなオブジェクトが悪いの作成:

それはOKではない場合、私はこのような何かを持っているん:

var d = new Date(), 
    t = d.getTime(); 
d = null; 
+0

__Itはすべての権利である...__ – Rayon

+0

あなたが_'it参照していないとはどういう意味ですかガベージコレクタはそれを削除できますか? – j08691

+0

私が知る限り、オブジェクトは他のオブジェクトや変数によって参照されていないときにのみ削除できますか? –

答えて

2

はい、オブジェクトを作成して保存しないでください。作成され、さらに参照されたり保管されたりしていないオブジェクトは、すぐにガベージコレクションの対象となります。だけでも、電流を得るために、Dateオブジェクトを作成する必要が

var t = Date.now() 

ありません:

はしかし、そのオブジェクトを作成するのではなく、私はあなただけで現在の時間を取得するための静的メソッドを使用することをお勧めしたいです(IEの本当の古いバージョンを除いて)。あなたはIE8をサポートしている場合、あなたは自分のプロジェクトでは、このポリフィルを使用することができますので、Date.now()があまりにもそこに動作します:

if (!Date.now) { 
    Date.now = function() { 
    return new Date().getTime(); 
    }; 
} 
+0

Node.jsと同じ話ですか? –

+1

@HristiyanDodovはい、node.jsにpolyfillは必要ありません。 –

+1

@HristiyanDodov - GCの問題はnode.jsで同じです。 node.jsには常に 'Date.now()'がありますので、node.jsでそれを使用するだけです。 – jfriend00

1

のどちらかがNumberを返しますので、参照カウントにはカウントされませんgetTime()、罰金です。どちらの場合もオブジェクトはGCされます。コメントで言ったように

しかし、あなただけのコードの明確なビットのためDate.now()を使用することができます。

console.log((new Date()).getTime() === Date.now());

0

その場でオブジェクトを作成して使用することは全くOKです。

しかし、2番目の例のように一時変数を作成したい場合は、explicitellyを設定して、nullにする必要はありません。あなたの変数がコード内の他の場所で積極的に参照されていない限り、変数はガベージコレクションされます。

関連する問題

 関連する問題