【问题标题】:Which method is the most appropriate for removing object keys which might be accessed after removal?哪种方法最适合删除删除后可能访问的对象键?
【发布时间】:2014-11-10 12:12:28
【问题描述】:

我的困境如下:我一直在使用删除方法删除对象键,一些功能在删除后尝试访问的键,我发现随着时间的推移,这导致了一个很小的、很小的......巨大的内存泄漏.

我一直试图为此找到一个好的答案,但到目前为止还没有运气。我找到的唯一简单参考解释说最好将对象键变为 null 而不是使用 delete 以避免内存泄漏。

现在我一直想知道哪种方法最适合我所描述的情况(也许是整体最佳实践):

1 - 删除 Object.key

2 - Object.key = null

3 - Object.key = ""

4 - Object.key = void(0)

5 - Object.key = function(){}

6 - 我没有列出的另一种方法 - 提供该方法作为示例

到目前为止,对于这种函数尝试访问已删除密钥的情况,第 1 项似乎几乎是不可能的,还有其他人有任何知识可以就此向我提供建议吗?

如果可能,请提供比较或说明,说明您知道最适合这种情况的方法的优势。

PS:需要移除的对象键可以是任何东西;函数、布尔值、字符串等

【问题讨论】:

  • 既然您似乎已经准备好了一个可测试的环境,那么您的观察结果是什么?顺便说一句,void 0 可以少输入一个字符。 ;-)
  • 我真的没有答案,但我绝对不会推荐function(){},因为它是真实的。
  • delete obj.key 不会以任何方式导致内存泄漏。如果由于密钥不存在而导致其他代码泄漏,那么您需要修复该代码,而不是修复密钥。如果密钥不需要存在,那么最佳做法是使用delete 将其删除。
  • @RobG 我去旅行之前。刚刚检查了另一个用户帮助我的东西,现在我无法自己进行实验,所以我想知道“为什么不问问社区?有人可能已经知道了”。克林特鲍威尔我看到了困境以及当某些函数试图检查密钥是否为空或空等时,但我希望肯定有一个不错的替代方法。
  • @Shadow - 那么没有通用的最佳实践。使用任何对行为不良的外部脚本造成最小伤害的方法。您只能通过研究或测试具有不同选项的不良行为脚本来解决这个问题。如果键的通常值是一个字符串,那么一个空字符串将是一个合乎逻辑的猜测,但你真的只需要测试。如果通常的值是一个对象,那么空对象或null 将是逻辑猜测,具体取决于错误代码的工作方式。

标签: javascript performance optimization


【解决方案1】:

在处理无法更改的不良行为代码时,没有最佳实践来处理这些键。您所能做的就是研究或测试代码并尝试找出键的哪个值造成的危害最小。

这不是语言问题。这不是最佳实践。没有什么神奇的答案永远是最好的答案。您正在尝试通过找到一个造成危害最小的值来解决错误代码,而知道答案的唯一方法是找出哪个值最适合该特定的错误代码。

如果键的通常值是一个字符串,那么一个空字符串将是一个合乎逻辑的猜测,但你真的只需要测试。如果通常的值是一个对象,那么根据坏代码的工作方式,空对象或 null 都是逻辑猜测。如果通常的值是一个函数,那么也许您可以尝试一个空函数作为猜测。

总结一下。研究、猜测、测试并选择能给您带来最佳结果(或最不坏结果)的选项。

【讨论】:

  • 根据我们在 cmets 期间的共同协议,我选择了您的答案作为答案,感谢大家抽出宝贵的时间。
猜你喜欢
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2018-04-20
相关资源
最近更新 更多