如何在JavaScript中销毁一个对象?

4
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我想知道如何在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
请注意,这将删除对象属性(因此仅删除一个引用,不一定是全部引用)。这可能不是原帖作者想要的。 - user395760
考虑以下代码片段: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
看看这个:http://perfectionkills.com/understanding-delete/#comment-57399 - 这篇文章被引用在https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete的底部 - 听起来我们应该使用null。 - Philip Murphy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接