jef*_*eon 66 javascript garbage-collection
可能重复:
在JavaScript中删除对象
我有一个具有大量属性的JS对象.如果我想强制浏览器垃圾收集这个对象,我是否需要将每个属性设置为null或者我是否需要使用delete运算符?这两者有什么区别?
Ann*_*lle 149
没有办法强制JavaScript中的垃圾收集,你真的不需要.x.y = null;并且delete x.y;都消除x了对前一个价值的引用y.必要时将为垃圾回收该值.
如果将属性清空,它仍被视为对象的"设置"并将被枚举. 我唯一能想到你想要的地方delete就是你要列举的属性x.
考虑以下:
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]);
Run Code Online (Sandbox Code Playgroud)
此代码将生成以下输出:
Deleted a.
b: 2
c: 3
Nulled out b.
b: null
c: 3
Run Code Online (Sandbox Code Playgroud)
小智 17
Javascript对象属性通常使用哈希表实现.设置为null会使哈希表中的键指向空值,而删除会删除键和值.
两者之间的主要可观察差异是,如果使用for..in循环迭代键,则删除键会导致迭代看到的条目更少.
我建议一般情况下更喜欢删除,除非你要重复设置和清除相同的密钥,这样就会让哈希表结构保持原样.然而,在任何典型情况下,这两种技术之间的任何性能差异都将是无法估量的.
-m @