是否確定要做到這一點:是否需要將用「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
那麼,據我所知,一個對象只有在沒有被其他對象或變量引用時才能被刪除? –