あなたはおそらく他の答えからあなたが必要とするものを持っていますが、要約すると:
私の質問はこれです:基礎となるオブジェクトを削除する方法はありますか
いいえ。それへのすべての参照を削除して、ガベージコレクションに使用できるようにすることができます。ガベージコレクターが実行されると(不特定の時間に)、オブジェクトが削除されます。
または、上記の両方のプロパティがfalseを評価するように、falseを何かで上書きしますか?
ではない正確に。各プロパティに新しい値を割り当てることができるのは、それらが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
}
オブジェクトがまだ実際に存在していることに注意してください。廃止を現在に変更し、ブール値を逆にして、if (obj.current())
ではなくチェックすることをお勧めしますif (!obj.obsolete())
。合うものは何でも。