我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
或者这个更好(或者过度了):
我认为前面的语句(即
我想知道如何在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年以后的浏览器,因为我知道过去的内存管理有点不一致。
var x = {}; x.y = { a: 1, b: function() {} }; delete x.y; // 现在x.y是未定义的
这意味着属性a和b可以进行垃圾回收 => 一切正常。如果x.y中有一个元素数组会怎样呢?考虑以下代码片段:var x = {}; x.y = { a: 1, b: function() {}, c: [1, 2, 3, 4, 5] }; delete x.y; // 现在x.y是未定义的
如果我们删除了父属性,所有子属性都会变得可以进行垃圾回收,因为所有子属性都无法访问。你同意吗?谢谢 - Philip Murphy