是否确定要做到这一点:是否需要将用“new”创建的Date对象存储在变量中?
var t = (new Date()).getTime();
或创建这样一个对象是坏?理论上它不应该是,因为它没有被引用,垃圾收集器可以删除它,对吗?
如果这也不行,我必须做这样的事情:
var d = new Date(),
t = d.getTime();
d = null;
是否确定要做到这一点:是否需要将用“new”创建的Date对象存储在变量中?
var t = (new Date()).getTime();
或创建这样一个对象是坏?理论上它不应该是,因为它没有被引用,垃圾收集器可以删除它,对吗?
如果这也不行,我必须做这样的事情:
var d = new Date(),
t = d.getTime();
d = null;
是的,可以创建一个对象并且不存储它。一个创建的对象,然后不被进一步引用或存储将立即有资格进行垃圾回收。
但是,而不是创建一个对象,我建议你只使用静态方法获取当前时间:
var t = Date.now()
没有必要,甚至创建一个Date对象只是为了得到当前时间(IE的真正旧版本除外)。如果要支持IE8,那么你可以只使用该填充工具在你的项目中,以便Date.now()
将在那里工作过:
if (!Date.now) {
Date.now = function() {
return new Date().getTime();
};
}
与Node.js一样的故事? –
@HristiyanDodov是的,除了node.js不需要polyfill。 –
@HristiyanDodov - GC问题在node.js中是一样的。 node.js总是有'Date.now()',所以你应该在node.js中使用它。 – jfriend00
要么是好的,getTime()
返回Number
,因此在引用计数不计数。在这两种情况下,对象都会被GCed。
然而,正如评论所说,你可以使用Date.now()
的代码更清楚一点:
console.log((new Date()).getTime() === Date.now());
这是完全确定,创建和动态使用对象。
但是,如果您想要像第二个示例中那样创建临时变量,则不必强制将其设置为空值。只要您的代码中的其他地方没有主动引用您的变量,它就会被垃圾收集。
__It是没事...__ – Rayon
你是什么意思_'it不是引用和垃圾收集器可以删除它__? – j08691
那么,据我所知,一个对象只有在没有被其他对象或变量引用时才能被删除? –