Javascript - 你可以重用Date()对象吗?

时间:2011-10-13 04:03:33

标签: javascript datetime date

是否可以创建一个新的Date()对象来获取当前日期,然后在一段时间之后,重用相同的Date()对象来获取新的当前时间?

似乎每次想要当前日期/时间时都必须创建一个新的Date对象。

在我的特定应用程序中,我想要运行动画,并且对于动画的每一帧,我需要获取当前时间。那么每一帧(可能是1000帧的帧)创建一个新的Date对象只会增加内存使用量。

有关此问题的任何线索吗?

4 个答案:

答案 0 :(得分:5)

除非您单独存储它们,否则您的日期对象会自动进行垃圾回收。此外,您可以在每次迭代时将当前日期存储到同一个变量,而不必担心内存耗尽。

例如:

var current = new Date()
for (var idx = 0; idx <= frameCount; ++idx) {
    current = new Date();

      // Do processing...
}

在这种情况下,您不会使用越来越多的内存,因为旧日期在被覆盖后将被垃圾收集。

答案 1 :(得分:2)

如果您实际上不想要日期,而是以毫秒为单位的时间,请使用Date.now(),这样您就不必创建Date对象。

var t = Date.now(); // 1318479105311

您可以使用以下命令将其填充到旧版浏览器中:

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

答案 2 :(得分:0)

如果您有现代浏览器,请致电

Date.now()

返回包含纪元时间的数字。

Numbers是JavaScript中的原语,因此您不会创建任何新对象。但正如其他人所说,新对象并不是一件大事。

你仍然可能对这种方法感兴趣,特别是如果你不需要年,月和日,并且会对纪元时间感到满意。我想如果你真的想要重用日期对象,你可以使用从纪元时间派生的值调用setter,但我认为这种方法不会给你带来什么。

答案 3 :(得分:0)

现代浏览器使用Date.now()方法返回纪元时间而不创建对象。 IE从版本9开始就有它。

我不确定这会带来多大的好处,但创建一个对象非常便宜。正如@icktoofay指出的那样,如果你不保留旧日期,他们将被垃圾收集。

编辑:here's a benchmark on bothDate.now实际上是Chrome的两倍,但是在&gt;中3mhz区域我不认为这对动画很重要。