2016-07-31 51 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

這是完全確定,創建和動態使用對象。

但是,如果您想要像第二個示例中那樣創建臨時變量,則不必強制將其設置爲空值。只要您的代碼中的其他地方沒有主動引用您的變量,它就會被垃圾收集。

相關問題