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月後,因爲我知道內存管理在過去有點不一致。
注意,此刪除對象的屬性(因此除去* *一個參考,不一定是所有)。不一定是OP想要的。 – delnan
@ 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現在未定義 ' 如果我們刪除父項屬性,則所有子項均無法訪問,所有子項都有資格進行垃圾回收。 你同意嗎? 謝謝 –
看看這個:http://perfectionkills.com/understanding-delete/#comment-57399 - 這篇文章引用在:https://developer.mozilla.org/en-US/docs/ JavaScript/Reference/Operators/delete - 聽起來像我們應該使用null來代替。 –