2016-07-31 13 views
2

是否确定要做到这一点:是否需要将用“new”创建的Date对象存储在变量中?

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

或创建这样一个对象是坏?理论上它不应该是,因为它没有被引用,垃圾收集器可以删除它,对吗?

如果这也不行,我必须做这样的事情:

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

__It是没事...__ – Rayon

+0

你是什么意思_'it不是引用和垃圾收集器可以删除它__? – j08691

+0

那么,据我所知,一个对象只有在没有被其他对象或变量引用时才能被删除? –

回答

2

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

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

var t = Date.now() 

没有必要,甚至创建一个Date对象只是为了得到当前时间(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

要么是好的,getTime()返回Number,因此在引用计数不计数。在这两种情况下,对象都会被GCed。

然而,正如评论所说,你可以使用Date.now()的代码更清楚一点:

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

0

这是完全确定,创建和动态使用对象。

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

相关问题