首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候应该在JavaScript中使用delete vs将元素设置为null?

什么时候应该在JavaScript中使用delete vs将元素设置为null?
EN

Stack Overflow用户
提问于 2009-12-23 01:40:13
回答 3查看 41.6K关注 0票数 70

可能重复:

Deleting Objects in JavaScript

我有一个具有大量属性的JS对象。如果我想强制浏览器对此对象进行垃圾回收,是否需要将这些属性中的每一个都设置为null,或者是否需要使用delete操作符?这两者有什么不同?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-23 02:04:54

在JavaScript中没有强制垃圾收集的方法,您也不需要这样做。x.y = null;delete x.y;都会消除xy前一个值的引用,必要时会对该值进行垃圾回收。

如果你将一个属性置为空,它仍然被认为是对象上的'set‘,并且会被枚举。我能想到的唯一一次你更喜欢delete的地方是当你要枚举x的属性时。

请考虑以下几点:

代码语言:javascript
复制
var foo = { 'a': 1, 'b': 2, 'c': 3 };

console.log('Deleted a.');
delete foo.a
for (var key in foo)
  console.log(key + ': ' + foo[key]);

console.log('Nulled out b.');
foo['b'] = null;
for (var key in foo)
  console.log(key + ': ' + foo[key]);

此代码将生成以下输出:

代码语言:javascript
复制
Deleted a.
b: 2
c: 3
Nulled out b.
b: null
c: 3
票数 155
EN

Stack Overflow用户

发布于 2009-12-23 02:44:09

Javascript对象属性通常使用哈希表实现。设置为null会使哈希表中的键指向空值,而delete会同时删除键和值。

两者之间的主要可观察区别在于,如果使用for..in循环迭代键,删除键会导致迭代看到的条目更少。

我建议通常倾向于删除,除非您要重复设置和清除相同的键,这会主张保留哈希表结构。然而,在任何典型情况下,这两种技术之间的任何性能差异都是非常小的。

-m@

票数 21
EN

Stack Overflow用户

发布于 2009-12-23 01:50:49

在JavaScript中,无法在特定时间强制垃圾收集。每个JavaScript引擎都有自己的处理方式。

但是,您可以做的是确保您的对象没有在任何地方被引用。将它们设置为null或删除它们实际上是在做同样的事情(delete永远不会删除对象-它只会删除对它的引用)。当垃圾收集运行时,它检查是否有任何对给定对象的引用-如果没有,则将其从内存中删除。这就是发生内存泄漏的地方( JavaScript对象引用DOM对象,反之亦然)。

确保你删除了所有的引用,你就会好起来的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1947995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档