2012-07-02 70 views
4

我想知道如何正確銷燬包含數組和其他數據的Javascript中的對象。如何在JavaScript中銷燬對象?

例如(這是對象的初始狀態):

acme.models.nomination = { 
    recipients : [], // array will be added to later. 
    awardType: {}, // this object will be filled out later. 
    privacy: 'private', 
    ... 
}; 

作爲應用程序用於將被添加到,與其他的數據元素沿nomination.recipients對象。是否足以執行以下操作來清除完整的對象時,用完後:

acme.models.nomination = {}; 

,或者這是更好的(或矯枉過正):

acme.models.nomination.privacy = undefined; 
acme.models.nomination.awardType = {}; 
acme.models.nomination.recipients = {}; 
acme.models.nomination = {}; 

我想前者語句(即acme.models.nomination = {})就足夠了,因爲這有效地使整個內容無法訪問,因此有資格進行垃圾回收。但是,我希望得到其他人的意見。順便說一句,答案可以在現代瀏覽器環境中給出,讓我們說瀏覽器2012年1月後,因爲我知道內存管理在過去有點不一致。

回答

2

我覺得delete - 運算符是你在找什麼:

delete acme.models.nomination; 
+1

注意,此刪除對象的屬性(因此除去* *一個參考,不一定是所有)。不一定是OP想要的。 – delnan

+0

@ micha149 請考慮以下代碼片段: ' var x = {}; x.y = {a:1,b:function(){}}; 刪除x.y; // x.y現在未定義 ' 這意味着屬性a和b有資格進行垃圾回收=>一切正常。 如果在x.y.中有一個元素數組呢?考慮下面的代碼片段: ' var x = {}; x.y = {a:1,b:function(){},c:[1,2,3,4,5]}; 刪除x.y; // x.y現在未定義 ' 如果我們刪除父項屬性,則所有子項均無法訪問,所有子項都有資格進行垃圾回收。 你同意嗎? 謝謝 –

+0

看看這個:http://perfectionkills.com/understanding-delete/#comment-57399 - 這篇文章引用在:https://developer.mozilla.org/en-US/docs/ JavaScript/Reference/Operators/delete - 聽起來像我們應該使用null來代替。 –