是否有必要在变量中存储使用“new”创建的Date对象?

时间:2016-07-31 15:39:29

标签: javascript object

可以这样做:

var t = (new Date()).getTime();

或者创建这样的对象很糟糕?理论上它不应该,因为它没有引用,垃圾收集器可以删除它,对吗?

如果不行,我是否必须这样做:

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

3 个答案:

答案 0 :(得分:2)

是的,可以创建一个对象而不是存储它。创建一个然后未被进一步引用或存储的对象将有资格立即进行垃圾收集。

但是,我建议您只使用静态方法获取当前时间,而不是创建该对象:

var t = Date.now()  

甚至不需要创建Date对象来获取当前时间(除了真正旧版本的IE)。如果您支持IE8,那么您可以在项目中使用此polyfill,因此Date.now()也可以在那里工作:

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

答案 1 :(得分:1)

要么很好,getTime()会返回Number,因此不计入引用计数。在两种情况下都将对象进行GCed。

但是,如评论中所述,您可以使用Date.now()获得更清晰的代码:

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

答案 2 :(得分:0)

即时创建和使用对象是完全可以的。

但是,如果要在第二个示例中创建临时变量,则不必强制将其设置为null。只要你的代码中的其他地方没有主动引用你的变量就会被垃圾收集。