你可能已经从其他答案中得到了你需要的东西,但总结一下:
我的问题是:有什么方法可以删除底层对象
不可以。您可以删除对它的所有引用以使其可用于垃圾回收。当垃圾收集器运行时(在某个未指定的时间),它将删除该对象。
或者用虚假的东西覆盖它,这样上面的两个属性都会评估虚假?
不完全是。您只能为每个属性分配一个新值,以便它们评估为 false(false、null、undefined、0 等)。对象不会跟踪引用它们的标识符,因此没有通用的方法可以说“删除对此对象的所有引用”。如果你想这样做,你必须自己跟踪引用并更改它们的值。
另一种方法是给对象一个属性来指示是否应该使用它(例如“过时”),可以在访问其他属性时检查该属性。公共属性非常简单,或者您可以使用构造函数中的闭包创建“私有”成员:
function Foo() {
var obsolete = false;
this.obsolete = function (){
return obsolete;
};
this.delete = function (){
obsolete = true;
};
}
var foo = new Foo();
var bar = new Foo();
alert(foo.obsolete() + ', ' + bar.obsolete()); // false, false
foo.delete();
alert(foo.obsolete() + ', ' + bar.obsolete()); // true, false
这将与您想要的一样工作。如果你可以删除你需要做的对象:
if ( data[key1][key2] ) {
// do stuff
}
使用上面的方法你会做:
if ( !data[key1][key2].obsolete() ) {
// do stuff
}
注意到该对象实际上仍然存在。您可能希望将obsolete更改为current并反转布尔值,以便检查if (obj.current())
而不是if (!obj.obsolete())
. 什么都适合。