如何快速清除 JavaScript 对象?

新手上路,请多包涵

使用 JavaScript 数组,我可以通过一次赋值将其重置为空状态:

array.length = 0;

这使得数组“出现”为空并准备重用,据我所知,这是一个单一的“操作” - 即恒定时间。

有没有类似的方法来清除 JS 对象?我知道我可以迭代它的字段来删除它们:

for (var prop in obj) { if (obj.hasOwnProperty(prop)) { delete obj[prop]; } }

但这具有线性复杂性。

我也可以将对象扔掉并创建一个新对象:

obj = {};

但是新对象的“混杂”创建会导致 IE6 上的垃圾收集出现问题。 ( 如此处所述

原文由 levik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

我认为,对您的问题的简短回答是否定的(您可以只创建一个新对象)。

  1. 在这个例子中,我相信将长度设置为 0 仍然会将所有元素留给垃圾收集。

  2. 如果你经常使用它,你可以将它添加到 Object.prototype 中。是的,它的复杂性是线性的,但是以后不进行垃圾收集的任何东西都会是。

  3. 这是最好的解决方案。我知道这与您的问题无关 - 但我们需要继续支持 IE6 多久?有许多活动停止使用它。

如果上面有任何不正确的地方,请随时纠正我。

原文由 jthompson 发布,翻译遵循 CC BY-SA 3.0 许可协议

好吧,冒着让事情变得太容易的风险……

 for (var member in myObject) delete myObject[member];

…在用最少的可怕括号在一行代码中清理对象似乎非常有效。所有成员将被真正删除,而不是作为垃圾留下。

显然,如果你想删除对象本身,你仍然必须为此做一个单独的 delete() 。

原文由 Wytze 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题